如何通过CMake的add_compile_definitions()重写数组初始化预定义宏?
在CMake中用
add_compile_definitions重写数组初始化宏的正确方法 你的代码通过预处理器宏MY_CHAR_ARRAY初始化uint8_t数组,要在CMake里用add_compile_definitions重写这个宏,核心问题是CMake会把逗号当成参数分隔符,必须把整个宏值用引号包裹,才能让编译器正确接收完整的数组初始化列表。
正确写法
add_compile_definitions(MY_CHAR_ARRAY="{0xAA, 0xBB, 0xCC}")
之前写法失败的原因
你尝试的各种写法都没处理CMake的参数解析规则:
- 不带引号时,逗号会被CMake识别为多个参数的分隔符,导致宏定义被拆成
MY_CHAR_ARRAY={0xAA、0xBB、0xCC}三个部分,编译器无法正确解析 - 其他格式(比如去掉逗号、合并十六进制值)不符合C语言数组初始化的语法,自然无法正确初始化数组
验证方式
可以通过查看CMake生成的编译命令(比如执行make VERBOSE=1或者ninja -v),确认编译器参数中是否包含-DMY_CHAR_ARRAY="{0xAA, 0xBB, 0xCC}",如果存在则说明宏定义已正确传递。
内容的提问来源于stack exchange,提问作者Brandon Dester
相关产品推荐
相关产品推荐

