2012-02-19 2 views
8

С GCC и gfortran я могу генерировать список preprossesor макросов, определенных компилятором, используя (отредактирован, чтобы отразить ответ ouah в)Сформировать список макросов препроцессора, определенных компилятором

gcc -E -dM - < /dev/null 

и

gfortran -cpp -E -dM /dev/null 

соответственно (по крайней мере на Linux).

Как я могу сделать то же самое с компиляторами Intel icc и ifort? Я знаю, что для ifort эти макросы определены here, но я хотел бы иметь возможность генерировать этот список сам, поскольку точные макросы в использовании и их значения будут зависеть от используемых параметров компилятора. Я также знаю о проекте predef.

ответ

3

С компилятором Intel Fortran, ifort, то можно использовать следующий:

ifort -E -fpp /dev/null -dryrun 2>&1 | grep -e -D | cut -c 5- 

кажется чем ifort не имеет эквивалентный -dM флага как ККА, gfortran и НКА делать.

+0

Отмечая это как принятый ответ, так как я действительно был заинтересован только в получении директив препроцессора, используемых с ifort (обобщение на включение компилятора Intel C было просто, чтобы надеяться, что вопрос станет более полезным). – Chris

+1

'ifort' всегда сложнее - так спасибо за его включение! – patrickvacek

10

Используйте это с компилятором Intel:

icc -E -dM - < /dev/null 

Обратите внимание, что с gcc, опция -E также требуется, если вы хотите использовать опцию -dM препроцессора.

+0

Спасибо за примечание об использовании опции '-E' с' gcc' - я редактировал свой вопрос, чтобы включить этот флаг. Любые идеи о том, чтобы сделать то же самое с ifort? – Chris

1

Для gfortran будьте уверены, что gfortran -E -dM - < /dev/null дает тот же результат, как если бы вы звонили gcc, что, вероятно, не помогает. Вы, вероятно, хотите что-то вроде этого (source):

gfortran -cpp -E -dM empty.f

Это даст вам меньший список того, что на самом деле gfortran предопределены. Вы заметите, что результаты, скорее всего, не содержат ничего полезного для определения операционной системы. Как правило, для Fortran вы можете сами определить их. Дополнительную информацию см. В разделе here. Вы также можете попробовать что-то вроде this, но я немного скептически отношусь к практически этому решению. Кроме того, эта ссылка подразумевает, что в свое время gfortran определяется больше, чем сейчас.