我想构建一个库,我需要向该构建传递两个定义,但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(中。