【问题标题】:define gets ignored by target_compile_definitions定义被 target_compile_definitions 忽略
【发布时间】:2020-08-21 05:35:43
【问题描述】:

我正在寻找构建一个库,我需要将两个定义传递给该构建,但是 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】:

    CMake 有 known limitations 说明编译定义可能是什么。

    这些限制包括函数样式定义 (_LIB_FALLTHROUGH()) 和包含双引号的定义 (")。

    建议不要尝试克服这些限制,而是使用以下编译定义创建一个单独的头文件

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-10
      • 2020-09-27
      • 2014-10-09
      • 2013-10-10
      • 2021-05-13
      • 2010-10-04
      • 2017-05-12
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多