#define в файлах Boost Jamfiles

Это моя структура проекта:

MainFolder
  - Jamroot.jam
  - AnotherFolder
      - libFolder
          - Jamfile.jam
          - cpp files

У меня есть #ifdef в одном из файлов cpp. Пример:

#ifdef SOMEVALUE
  Code
#endif

Мне нужно скомпилировать файлы cpp с #define в Jamfile. Поскольку у меня есть два типа исполняемых файлов (один с #define и один без), мне нужно сделать это в самом Jamfile, а не в коде cpp.

Я пробовал следующее, но оно не работает (не удалось найти определения внутри блока #ifdef #endif):

lib libname : [ glob *.cpp ] : <link>static : <define>SOMEVALUE ;

person Rajs123    schedule 03.10.2016    source источник


Ответы (2)


Добавление определения препроцессора использует функцию «определить», как вы видели в своем примере. Но эта функция должна быть указана как требование. целевого определения. требования указаны как третий аргумент целевого определения, а не четвертый, как в вашем случае использования. Следовательно, вместо:

lib
  libname # main-target-name
  : [ glob *.cpp ] # sources
  : <link>static # requirements
  : <define>SOMEVALUE # default-build
  ;

Вам нужно переместить «‹define›» из требований к использованию в целевые требования:

lib
  libname # main-target-name
  : [ glob *.cpp ] # sources
  : <link>static <define>SOMEVALUE # requirements
  : # default-build
  : # usage-requirements
  ;

Вы можете найти все аргументы целевого определения здесь.

person GrafikRobot    schedule 06.10.2016

В моем более раннем проекте мы используем другую компиляцию для режима отладки, которая, помимо добавления символов отладки, используется для печати многих полезных значений во время выполнения. Как это было сделано

#ifdef DEBUG
/* Piece of code here*/
#endif

и при компиляции через GCC с ключом -DDEBUG

person Ajay    schedule 05.10.2016