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

Этот код, как правило, работает нормально, но рассмотрим проблему повторного использования кода.

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

Затем кто-то копирует ваш фрагмент в свой проект таким образом, что он выполняется тысячу раз в секунду. У этого человека теперь есть огромная утечка памяти в его программе. Не очень хорошо в целом, обычно смертельно для серверного приложения.

Повторное использование кода типично для предприятий. Обычно компания владеет всем кодом, который производят его сотрудники, и каждый отдел может повторно использовать все, что принадлежит компании. Поэтому, написав такой «невинно выглядящий» код, вы вызываете потенциальную головную боль другим людям. Это может заставить вас уволить.

29
задан hochl 31 October 2014 в 15:42
поделиться

3 ответа

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

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

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

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

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

36
ответ дан DLRdave 31 October 2014 в 15:42
поделиться

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

Это просто вопрос твоей привычки.

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

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

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

3
ответ дан Sergei Nikulov 31 October 2014 в 15:42
поделиться

Если вы хотите добавить 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 .

. ]
1
ответ дан Jayhello 31 October 2014 в 15:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: