【问题标题】:How to declare a function like macro using CMake如何使用 CMake 声明类似宏的函数
【发布时间】:2020-07-15 10:57:40
【问题描述】:

我找不到如何在 CMake 中声明类似宏的函数。

我需要一个宏函数,比如:

#define MYFUNC(foo) QString( foo + "_suffix" )

由我的 CMakeLists.txt 文件定义。我试过了:

add_definitions("-DMYFUNC(foo)=QString\(foo+\"_suffix\"\)")

add_definitions("-DMYFUNC\(foo\)=QString\(foo+\"_suffix\"\)")

但没有一个有效,编译器 (VS2015) 总是报告 MYFUNC 未定义...

【问题讨论】:

    标签: cmake macros preprocessor


    【解决方案1】:

    来自Visual Studio documentation on /D

    /D 选项不支持类似函数的宏定义。要插入无法在命令行中定义的定义,请考虑 /FI(命名强制包含文件)编译器选项。

    为了完整起见,GCC 确实在命令行中support defining function macros

    如果您希望在命令行上定义类似函数的宏,请在等号(如果有)之前用括号括起来编写其参数列表。括号对大多数 shell 都有意义,因此您应该引用该选项。使用 sh 和 csh,-D'name(args...)=definition' 有效。

    【讨论】:

    • 我在 gcc/linux 中处理完全相同的问题,并且不知何故宏参数没有被替换。
    【解决方案2】:

    COMPILE_DEFINITIONS 的 CMake 文档明确指出不支持类似函数的宏:

    COMPILE_DEFINITIONS 属性可以使用语法VARVAR=value 设置为以分号分隔的预处理器定义列表。不支持函数样式定义。 CMake 将自动为原生构建系统正确转义该值(请注意,CMake 语言语法可能需要转义来指定某些值)。

    考虑使用-include 来强制包含定义宏的头文件。

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      相关资源
      最近更新 更多