我想建立一个库,我需要传递两个定义到这个库中,但是cmake的 target_compile_definitions() 扰乱它们,使其无法使用。
这两个定义是。
-D'_LIB_EXCEPTION_ABI=__attribute__((visibility("default")))'
-D'_LIB_FALLTHROUGH()=((void)0)'
不幸的是,第一个定义被翻译成(在命令行中),
-D'_LIB_EXCEPTION_ABI="\__attribute__((visibility(\"default\")))'"
而第二个定义在命令行中完全没有出现.
CMake 有 已知的限制 上的编译定义可以是什么。
这些限制包括 功能式 定义(_LIB_FALLTHROUGH()
)和含有双引号的("
).
与其试图克服这些限制,不如创建一个 单独的头文件 和这些编译定义。
#define _LIB_EXCEPTION_ABI __attribute__((visibility("default")))
#define _LIB_FALLTHROUGH() ((void)0)
这个头文件可以包含在 -include
编译器选项(gcc)或 /FI
选项(Visual Studio)。