c - CMake:每个目标都有不同的 configure_file()
问题描述
我不是很熟悉,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
他们每个人都有不同的配置参数。
谢谢!
解决方案
该命令configure_file
创建一个“真实”文件:它对每个目标都有相同的内容。
但是,创建的文件可能包含#ifdef
(或其他条件语句),因此其解释可能因不同的目标而异。
以下示例使用target_compile_definitions命令为特定目标“分配”编译定义。
配置.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)
推荐阅读
- unity3d - 未知 Api 兼容性级别 6 - Unity
- runtime-error - Pytorch RuntimeError:设备类型为 cuda 的预期对象,但在调用 _th_index_select 时获得了参数 #1 'self' 的设备类型 cpu
- python - Sympy parse_expr 带变量和 == 返回 False
- python - 如何将四个二进制 keras 模型合并为一个(相同的输入,但 4 个不同的输出)
- docker - docker:来自同一 NAT 中其他设备的绑定端口上的连接被拒绝
- java - 如何用ant构建jar文件?
- firebase - 尝试在反应本机应用程序中使用 Firebase 登录时出现“auth/network-request-failed”
- matlab - Matlab如何画一个圆?(最小二乘法)
- angular - “元素”类型上不存在属性“onclick”
- kubernetes - 为什么我的 GKE 集群中的 pod 会收到对 Web 服务器根路径的重复请求?