CMake: разные configure_file () для каждой цели - PullRequest
0 голосов
/ 23 февраля 2019


Я не очень знаком с cmake, но, как следует из названия, я хотел бы сделать следующее:

У меня есть файл конфигурации заголовка (например, * 1005).*), в котором я хотел бы указать все мои параметры в зависимости от того, какую цель я в данный момент вызываю.Таким образом, мой заголовочный файл выглядит примерно так:

#cmakedefine TEST @TEST@
#cmakedefine PINK @PINK@

#ifndef TEST
#define MY_A 10    
#endif
#ifdef PINK
#define MY_A 20
#endif

Теперь в моем CMakeLists.txt я хотел бы иметь несколько целей, например (фактически файл config.h только что включен из других .cфайлы)

add_executable(FirstTarget
    something.c
    somethingelse.c
    config.h
)

add_executable(SecondTarget
    something.c
    somethingother.c
    config.h
)

И что я действительно хотел бы сделать, это то, что FirstTarget И SecondTarget имеют другой файл конфигурации, поэтому я спрашиваю, возможно ли запустить что-то вроде

set(TEST Test)
configure_file(config.h.in config.h)

только для цели FirstTarget, а затем каким-то образом работает на SecondTarget

set(PINK Test2)
configure_file(config.h.in config.h)

, чтобы при вызове make FirstTarget и make SecondTarget у них были разные параметры конфигурации.

Спасибо!

1 Ответ

0 голосов
/ 23 февраля 2019

Команда configure_file создает «реальный» файл: она имеет одинаковое содержимое для каждой цели.

Однако созданный файл может содержать #ifdef (или другое условное выражение).операторы), поэтому его интерпретация может отличаться для другой цели.

В следующем примере используется команда target_compile_definitions для "назначения" определений компиляции для конкретногоtarget.

config.h :

#ifndef TEST
#define MY_A 10    
#endif
#ifdef PINK
#define MY_A 20
#endif

CMakeLists.txt :

add_executable(FirstTarget ...)
# When "config.h" will be included into this target, it will use "PINK" branch.
target_compile_definitions(FirstTarget PRIVATE PINK)

add_executable(SecondTarget ...)
# When "config.h" will be included into this target, it will use "TEST" branch.
target_compile_definitions(FirstTarget PRIVATE TEST)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...