我想设置一个编译选项-DVAR=xxx
。我知道我可以用它来实现这一点,target_compile_options
但我的问题是该值xxx
必须动态生成,并且只能作为 txt 文件的内容使用。
这是我的尝试:
- 创建一个自定义命令来生成包含要使用的值的文件
- 创建一个允许构建
var.txt
文件的自定义目标 - 创建依赖项以确保
var.txt
在编译之前生成MyExe
但我不知道如何从文件中检索所需的值并在target_compile_options
.
cmake_minimum_required(VERSION 3.13)
project ("MyProject")
add_custom_command (
OUTPUT var.txt
COMMAND echo "123" > var.txt # just an example here, the real generation is more complex
COMMENT "Generate variable value"
)
add_executable (MyExe main.cpp)
target_compile_options (MyExe PUBLIC -DVAR=???) # how to get the content of "var.txt" for setting VAR ?
add_custom_target (var ALL DEPENDS var.txt)
add_dependencies (MyExe var)
是否可以target_compile_options
使用从生成的文件中检索到的值?
是的,但是没有时间旅行。
add_custom_command
在构建阶段执行,编译选项在配置阶段设置,配置阶段在构建阶段之前运行。请参阅 cmake 介绍。您可以使用 执行命令
execute_process
并使用 CMake 语言(考虑 JSON)对其进行解析,并在 CMake 的配置阶段提取编译标志并使用 正常设置它们target_compile_definitions
。