首页 > 解决方案 > Cmake 命令行参数与 add_compile_definitions

问题描述

cmake .. -DVAR="something"使用 CMakeLists.txt 编译和cmake ..使用CMakeLists.txt有什么区别add_compile_definitions(VAR="something")?如何实现与命令行参数相同的行为,但使用 CMakeLists.txt?

标签: cmake

解决方案


用 cmake .. -DVAR="something" 和 cmake .. 编译但在 CMakeLists.txt 中使用 add_compile_definitions(VAR="something") 有什么区别?

cmake命令行选项执行以下-D操作:“创建或更新 CMake CACHE 条目”。-DVAR=something集合的cmake变量VARsomething

add_compile_definitions确实:“将预处理器定义添加到源文件的编译中”。VAR在这种情况下,它添加了一个要设置的宏"something"(我认为包括引号)。

他们做不同的事情。

更喜欢target_compile_definitions而不是add_compile_definitions.

如何实现与命令行参数相同的行为,但使用 CMakeLists.txt?

如果要将 cmake 变量设置VARsomething

// in CMakeLists.txt
set(VAR something)

但这不会在 cmake 缓存中设置变量。同样的行为将是相当的:

set(VAR something CACHE STRING "" FORCE)

推荐阅读