define gets ignored by target_compile_definitions



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

相关内容

最新更新