Обратная совместимость `add_compile_definitions` - PullRequest
0 голосов
/ 16 апреля 2020

Я работаю над исправлением некоторых файлов CMake, которые были созданы с версией более новой, чем 3.10, но должны были быть написаны для совместимости с 3.10.

Существует определенная строка:

add_compile_definitions(SOME_BOOL_VARIABLE)

, которую я не могу понять, как изменить, чтобы она работала с версией 3.10. Команда add_definitions(SOME_BOOL_VARIABLE) была очевидной вещью, которую я пробовал, но выдает ошибки, когда «нет такого файла каталога».

1 Ответ

1 голос
/ 16 апреля 2020

Из документации CMake функциональность add_definitions() и add_compile_definitions() по существу идентична:

Добавляет определения препроцессора в компилятор командная строка для целей в текущем каталоге и ниже (добавляется ли до или после вызова этой команды).

Разница заключается в синтаксисе, принятом для аргументов команды. Более старая команда add_definitions() требует, чтобы флаг -D был добавлен перед каждым определением.

add_definitions(-DSOME_BOOL_VARIABLE) 

Более новая команда add_compile_definitions() (доступная в CMake 3.12 и выше) является более чистой и не требует префикса флага -D.


Если вы выполняете рефакторинг Ваш код, современный CMake поощряет подход, ориентированный на цель c. Когда бы ни было возможно, вы должны предпочесть команду target_compile_definitions(), чтобы добавить определения препроцессора только к тем целям, которые в них нуждаются.

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