gpt4 book ai didi

CMake : different configure_file() for each target

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:14 25 4
gpt4 key购买 nike


我对 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
)

我真正想做的是 FirstTargetSecondTarget 有不同的配置文件,所以我想问的是是否可以运行类似

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

仅针对目标FirstTarget,然后以某种方式运行SecondTarget

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

因此,如果我调用 make FirstTargetmake SecondTarget,它们各自具有不同的配置参数。

谢谢!

最佳答案

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)

关于CMake : different configure_file() for each target,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54836470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com