Как создать C #define для определенной цели, используя CMake? - PullRequest
19 голосов
/ 18 марта 2011

Я чувствую себя немного глупо сейчас.После недавнего преобразования нескольких небольших проектов в CMake, я решил также избавиться от нескольких файлов "Platform_Config.h".Эти файлы содержат несколько директив предварительной обработки, таких как #define USE_NEW_CACHE и управляющая компиляция.

Как бы я "преобразовал" эти определения для управления с CMake?В идеале, используя эти переменные «кеша», пользователь может легко редактировать.

Ответы [ 3 ]

22 голосов
/ 18 марта 2011

Есть два варианта.Вы можете использовать метод add_definitions для передачи определений в виде флагов компилятора: Например, где-то в ваших проектах cmakelists.txt:

add_definitions( -DUSE_NEW_CACHE )

CMake убедится, что префикс -D преобразуется вправофлаг для вашего компилятора (/ D для msvc и -D для gcc).

Либо проверьте файл_конфигурации .Он более сложный, но может лучше подходить к исходному подходу с файлом Platform_Config.

Вы можете создать входной файл, аналогичный вашему исходному Platform_Config.h, и добавить в него строки "#cmakedefine".

Давайте вызовем Platform_Config.h.in:

// In Platform_Config.h.in
#cmakedefine USE_NEW_CACHE
// end of Platform_Config.h.in

При последующем запуске

configure_file( ${CMAKE_SOURCE_DIR}/Platform_Config.h.in ${CMAKE_BINARY_DIR}/common/Platform_Config.h )

в вашем файле build-dir будет создан новый файл Platform_Config.Те переменные в cmake, которые также являются cmakedefine, будут присутствовать в сгенерированном файле, остальные будут закомментированы или не определены.

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

13 голосов
/ 18 марта 2011

опция команда может предоставить то, что вы ищете.
используйте его со свойством COMPILE DEFINITIONS на цели, и я думаю, что вы сделали. Чтобы установить свойство для цели, используйте команду set target properties

option(DEBUGPRINTS "Prints a lot of debug prints")
target(myProgram ...)
if(DEBUGPRINTS)
set_target_properties(myProgram PROPERTIES COMPILE_DEFINITIONS "DEBUGPRINTS=1")
endif()

редактирование:

Опция, которую я написал в примере, отображается как флажок в графическом интерфейсе CMake.

3 голосов
/ 11 декабря 2014

В случае, если вы хотите установить определения для цели: начиная с 2.8.11 вы можете использовать target_compile_definitions.

В более ранних версиях вы, вероятно, не хотите использовать set_target_properties как есть, так как он перезаписывает любые определения, которые вы установили ранее. Вместо этого сначала вызовите get_target_property, затем объедините с предыдущими значениями. См. add_target_definitions здесь .

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