Ответ 1
-
CMAKE_CXX_FLAGS
используется для добавления флагов для всех целей С++. Это удобно передавать общие аргументы, такие как уровни предупреждений или выбранные стандарты С++. Он не влияет на цели C или Fortran, и пользователь может передать дополнительные флаги. -
add_compile_options
добавляет параметры ко всем целям в каталоге и его подкаталогах. Это удобно, если у вас есть библиотека в каталоге, и вы хотите добавить параметры ко всем объектам, связанным с библиотекой, но не связанным со всеми другими объектами. Кроме того,add_compile_options
может обрабатывать аргументы с выражением генератора . В документации явно указано, что
Эта команда может использоваться для добавления любых параметров, но альтернативные команды существуют для добавления определений препроцессора (
target_compile_definitions()
иadd_definitions()
) или включить каталоги (target_include_directories()
иinclude_directories()
).
-
add_definitions
предназначен для передачи значений препроцессора типа-DFOO -DBAR=32
(/D
в Windows), который определяет и устанавливает препроцессорные переменные. Вы можете передать любой флаг, но флаги вышеуказанной формы будут обнаружены и добавлены в свойство[COMPILE_DEFINITIONS][2]
, которое вы можете впоследствии прочитать и изменить. Здесь вы также можете использовать выражения генератора. В документации указаны области действия для каталогов, целей и исходных файлов.
Для данной цели CMake будет собирать все флаги из CMAKE_CXX_FLAGS
, цели и каталога COMPILE_DEFINITIONS
и всех add_compile_options
, которые влияют на цель. CMAKE_CXX_FLAGS
не изменяются другими командами или наоборот. Это нарушит объем этих команд.