CMake: как передать макросы препроцессора - PullRequest
40 голосов
/ 09 марта 2012

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

#ifdef _COMPILE_UNIT_TESTS_
    BLA BLA
#endif //_COMPILE_UNIT_TESTS_

Теперь мне нужно передать это значение из CMake в препроцессор. Установка переменной не работает, так как я могу это сделать?

Ответы [ 2 ]

51 голосов
/ 09 марта 2012

add_definitions(-DCOMPILE_UNIT_TESTS) (ср. Документ CMake ) или изменить одну из переменных флага (CMAKE_CXX_FLAGS, или CMAKE_CXX_FLAGS_<configuration>) или set COMPILE_FLAGS переменная на цели.

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

15 голосов
/ 10 марта 2012

Если вам нужно настроить много переменных препроцессора, вы можете использовать configure_file :

Создайте файл конфигурации, например. config.h.in с

#cmakedefine _COMPILE_UNIT_TESTS_
#cmakedefine OTHER_CONSTANT
...

затем в вашем CMakeLists.txt:

set(_COMPILE_UNIT_TESTS_ ON CACHE BOOL "Compile unit tests") # Configurable by user 
set(OTHER_CONSTANT OFF) # Not configurable by user
configure_file(config.h.in config.h)

в каталоге сборки генерируется config.h:

#define _COMPILE_UNIT_TESTS_
/* #undef OTHER_CONSTANT */

В соответствии с предложением robotik , вы должны добавить что-то вроде include_directories(${CMAKE_CURRENT_BINARY_DIR}) к вашему CMakeLists.txt, чтобы #include "config.h" работал в C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...