define会被target_compile_definitions忽略。

问题描述 投票:0回答:1

我想建立一个库,我需要传递两个定义到这个库中,但是cmake的 target_compile_definitions() 扰乱它们,使其无法使用。

这两个定义是。

  • -D'_LIB_EXCEPTION_ABI=__attribute__((visibility("default")))'
  • -D'_LIB_FALLTHROUGH()=((void)0)'

不幸的是,第一个定义被翻译成(在命令行中),

  • -D'_LIB_EXCEPTION_ABI="\__attribute__((visibility(\"default\")))'"

而第二个定义在命令行中完全没有出现.

makefile build cmake
1个回答
2
投票

CMake 有 已知的限制 上的编译定义可以是什么。

这些限制包括 功能式 定义(_LIB_FALLTHROUGH())和含有双引号的(").

与其试图克服这些限制,不如创建一个 单独的头文件 和这些编译定义。

#define _LIB_EXCEPTION_ABI __attribute__((visibility("default")))
#define _LIB_FALLTHROUGH() ((void)0)

这个头文件可以包含在 -include 编译器选项(gcc)或 /FI 选项(Visual Studio)。

© www.soinside.com 2019 - 2024. All rights reserved.