我对cmake
不太熟悉,但正如标题所述,我想做的是以下事情:
我有一个配置的头文件(例如config.h.in
),其中我想根据当前调用的目标指定所有参数。所以我的头文件是这样的:
#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
,它们每个都有不同的配置参数。
谢谢!
答案 0 :(得分:1)
命令configure_file
创建一个“真实”文件:每个目标的内容相同。
但是,创建的文件可能包含#ifdef
(或其他条件语句),因此其解释可能对不同目标不同。
以下示例使用target_compile_definitions命令为特定目标“分配”编译定义。
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)