Подтвердить что ты не робот

CMake: когда использовать add_definitions вместо set_target_properties (целевые определения PROPERTIES COMPILE_DEFINITIONS)

В документации CMake можно прочитать:

add_definitions

Добавляет флаги в командную строку компилятора для источников в текущем каталоге и ниже.

Свойство COMPILE_DEFINITIONS в каталогах

COMPILE_DEFINITIONS: определения препроцессора для компиляции источников каталогов.

Свойство COMPILE_DEFINITIONS для целей

COMPILE_DEFINITIONS: определения препроцессора для компиляции целевых источников.

Свойство COMPILE_DEFINITIONS в исходных файлах

COMPILE_DEFINITIONS: определения препроцессора для компиляции исходного файла.

Функциональность

COMPILE_DEFINITIONS и add_definitions, похоже, перекрывается. COMPILE_DEFINITIONS свойство кажется более гибким.

Итак, кажется, что свойство COMPILE_DEFINITIONS делает все add_definitions и даже больше.

Итак, в каких случаях мы должны называть add_definitions, поскольку свойство COMPILE_DEFINITIONS не может быть использовано?

4b9b3361

Ответ 1

add_definitions существует в CMake с момента появления самой первой сборки CMake более десяти лет назад.

COMPILE_DEFINITIONS - это просто новый, более гибкий и детальный способ сделать это.

Они всегда будут рядом: поскольку 99% + существующих файлов CMakeLists.txt в мире используют add_definitions, просто было бы неразумно удалять его. Разработчики CMake очень стараются поддерживать обратную совместимость... иногда в ущерб ясности и простоте. И иногда делают одно и то же по-разному разными способами.

Итак: add_definitions в первую очередь полезен для настройки уже существующих файлов CMakeLists - для тех проектов, которые существовали до появления COMPILE_DEFINITIONS. И поскольку эти проекты используют его, любые новые проекты, основанные на том, что люди узнают из чтения этих файлов CMakeLists, также вполне могут использовать add_definitions.

Но если для ваших нужд достаточно использовать COMPILE_DEFINITIONS, в этом нет ничего плохого.

Ответ 2

Я не говорю, что нужно использовать .

Это просто твоя привычка.

Некоторые рекомендации:

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

  • Используйте COMPILE_DEFINITIONS для точной настройки целевого или определенного источники.

Ответ 3

Если вы хотите добавить compile definition for target, вы можете использовать эту функцию target_compile_definitions, которая более удобна - например, добавить несколько compile definitions один раз, например:

add_executable (trie_io_test demo12.cpp)
target_compile_definitions(trie_io_test PRIVATE UNIT_TESTING=1 IO_TEST=1)

Вы можете увидеть этот вопрос , как установить несколько определений компиляции для целевого исполняемого файла, чтобы получить дополнительную информацию также из этого https://cmake.org/cmake/help/v3.0/command/target_compile_definitions.html.