Использование devenv для передачи переменных препроцессора компилятору Intel Fortran

Я использую VS 2008 с компилятором Intel(R) Fortran версии 10.1.025.

Чтобы создать свое решение, я использую пакетный файл со следующим синтаксисом:

devenv /rebuild "Release|Win32" "c:...\solution.sln" /Project "ProjectName_InTheSolution"

Используя конфигурацию «Release | Win32», я указываю в VS ProjectProperties-> Fortran-> Proprocessor-> Preprocessor Definitions значение «test».

Внутри моего кода я проверяю, определена ли переменная «test», которая работает правильно.

Кто-нибудь знает способ изменить «Определения препроцессора» компилятора fortran с помощью командной строки? Я хочу также добавить значение «commandLine», чтобы было «test; commandline» в «Определениях препроцессора».

Некоторые примечания:

1) I have to use the devenv.exe
2) I don't want to change neither the source code or the project file prior the compilation
3) I can use environment variable to pass option (if there is any way, I try the CL but didn't work)

заранее спасибо


Спасибо за ваш ответ, но, возможно, я не совсем понял ваше решение, но я пробовал следующее:

1) Я меняю «Дополнительные параметры» (AO) на /Dtest и: 1.1) Если я компилирую из Visual Studio или командной строки, проверка «!DEC$ IF DEFINED (test)» истинна.

2) Я изменил AO на "$(DEFINE)" и: 2.1) В Visual Studio я вижу предупреждения: "предупреждение командной строки #10161: нераспознанный исходный тип "$(DEFINE)"; объектный файл предполагается ifort" и проверка " !DEC$ IF DEFINED (test)" является ложным 2.2) Я добавляю переменную Define в "Переменные среды пользователя", та же ошибка из 2.1

3) Я меняю AO на "/D$(DEFINE)" и получаю сообщение об ошибке "Неверный синтаксис, '=' ожидается при обработке '@$(define)' fortcom"

4) Я меняю AO на "$(DEFINE)" и SET DEFINE=/test, и это тоже не работает, "!DEC$ IF DEFINED (test)" ложно

@cup Я думаю, мне нужно немного лучше понять ваше решение, если бы вы могли дать мне дополнительную информацию о вашем решении, я был бы очень признателен.

Я пытаюсь сделать следующее:

program main
integer:: ii
!DEC$ IF DEFINED (test) 
ii = 72
!DEC$ ENDIF
!DEC$ IF DEFINED (test2) 
ii = 80
!DEC$ ENDIF
print *, "this is up to column ", ii
end

Теперь я хочу управлять из командной строки, какая часть кода будет скомпилирована, делая что-то вроде этого:

1) from the command line:  set define=test
2) devenv elephant.sln /build
3) run debug/elephant.exe  -> get "72"

4) from the command line:  set define=test2
5) devenv elephant.sln /build
6) run debug/elephant.exe  -> get "80"

Это возможно ? Заранее спасибо, Руи


person rsantos    schedule 16.04.2013    source источник


Ответы (1)


Попробуй это

1) Создайте следующую программу F77

      program main
      integer:: ii
!                                                                       ,-- column 73
      ii = 72                                                           +8
      print *, "this is up to column ", ii
      end

2) Создайте решение для вышеуказанной программы, скажем, слон.sln

Если вы просто создаете и запускаете, он должен отображать «это до столбца 72».

3) Откройте свойства проекта, в разделе Fortran/Command Line добавьте $(DEFINES) в поле дополнительных параметров.

4) Сохранить и выйти

5) установите DEFINES=/extend_source:72

6) devenv слон.sln /сборка

7) запускаем debug/elephant.exe - должно получиться 72

8) установите DEFINES=/extend_source:80

9) devenv слон.sln /сборка

10) запускаем debug/elephant.exe - должно получиться 80.

11) Если вы хотите добавить дополнительные параметры /D, вставьте их в переменную среды DEFINES.

В основном не используйте определения препроцессора - просто сбросьте свои настройки в переменную среды DEFINES, и они будут выбраны дополнительными параметрами.

person cup    schedule 16.04.2013