如何用CMake实现C语言中#define mydef a, b, c的定义效果?
在CMake中实现不带引号的多值宏定义
要复现C语言中#define mydef a, b, c的效果,关键是避免CMake将逗号解析为参数分隔符,同时不要给宏值加引号。以下是几种可行的写法:
方法1:用反斜杠转义逗号
直接在CMake语句中对逗号进行转义,让CMake将整个a, b, c视为单个宏值:
target_compile_definitions(myproject PRIVATE mydef=a\,\ b\,\ c)
方法2:使用CMake生成器表达式$<COMMA>
通过生成器表达式$<COMMA>来表示逗号,这种写法跨平台兼容性更好:
target_compile_definitions(myproject PRIVATE mydef=a$<COMMA> b$<COMMA> c)
方法3:借助变量传递宏值
先将宏值存入变量,再传递给target_compile_definitions,变量的引号会被CMake处理,不会带入最终的宏定义:
set(MY_DEF "a, b, c") target_compile_definitions(myproject PRIVATE mydef=${MY_DEF})
为什么原写法会带引号?
你之前用mydef="a, b, c"时,双引号会被CMake当作宏值的一部分传递给编译器,最终生成的宏自然会包含引号。只要去掉引号,并正确处理逗号的分隔问题,就能得到预期的#define mydef a, b, c效果。
内容的提问来源于stack exchange,提问作者ShakesBeer
相关产品推荐
相关产品推荐

