Наличие target_compile_definitions применяется к библиотеке stati c, которая связана в - PullRequest
0 голосов
/ 23 апреля 2020

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

#ifdef _EXE2_

   Do certain stuff

#endif

сейчас наш CMakeLists.txt определяет две цели exe1 и exe2, я попробовал следующее изменение, чтобы __EXE2_ определялся только для exe2

target_compile_definitions(exe2 PUBLIC _EXE2_)

, однако мне кажется, что приведенная выше строка просто добавляет это определение к exe2 и stati c lib не получает этого определения. Есть ли способ обойти это? или я должен решить это с файлом конфигурации exe. Это код C ++ на linux, если это поможет.

1 Ответ

2 голосов
/ 23 апреля 2020

С чего бы это? Exe зависит от библиотеки, а не наоборот. Как правило, библиотека не имеет отношения к модулям, которые ее включают.

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

Если вы хотите, вы можете просто добавить определения глобально в ваш основной CMakeLists.txt:

add_compile_definitions(_EXE2_)

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

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