【问题标题】:Is the QT DEFINES doing the same thing as #define in C++?QT DEFINES 是否与 C++ 中的#define 做同样的事情?
【发布时间】:2013-04-26 19:41:58
【问题描述】:

DEFINES += includthisvariable 在 QT 中对 .pro 文件有什么作用?

如果它像 C++ 中的 #define 一样工作,那么在哪里定义 includethisvariable 以便预处理器可以用我设置的值替换 includethisvariable

我了解 #define 在 c++ 中的作用,因为您将值设置在您定义的值之外。但是在这里,您似乎只是列出了一个名称... QT 文档没有帮助我解释这一点。

【问题讨论】:

标签: c++ qt


【解决方案1】:

Qt 项目文件的DEFINES 变量中的项目以-D 选项(或任何适合正在使用的编译器的选项)在编译器的命令行中结束。要给你的宏定义一个值而不是仅仅定义它,请使用以下命令:

DEFINES += FOOBAR=foobar_value

这将在编译器的命令行中显示为-DFOOBAR=foobar_value

如果您需要空格,则需要引用值 - 并转义将在编译器命令行上传递的引号:

DEFINES += FOOBAR="\"foobar value\""

这个显示为:-DFOOBAR="foobar value"

【讨论】:

  • /D 在 Windows 上,-D 在 Linux、OSX 等上
【解决方案2】:

是的,它以相同的方式工作。 DEFINES += includethisvariable 在正在编译的源代码中包含预处理器符号 includethisvariable

这意味着任何#ifdef 语句,如

#ifdef includethisvariable
...
...
#endif

包含在正在编译的源代码中。

也可以定义带有值的宏

`DEFINES += "MAXBUFFERSIZE=4096"

【讨论】:

    【解决方案3】:

    如果你想在你的 qmake 文件中定义一个字符串字面量的宏,相当于#define VAR "Some string"

    看起来像这样:

    DEFINES += CODE_WORKING_DIR=\\\"$$PWD\\\"
    

    这样它就会将其作为 g++(或您用于编译的任何内容)的参数生成:

    g++ -c -DCODE_WORKING_DIR=\"/path/to/my/code\"
    

    太丑了。如果有人知道更好的方法,请告诉我。

    【讨论】:

      【解决方案4】:

      来自documentation

      定义在 .config 文件中指定。 .config 文件是一个 常规 C++ 文件,在所有源文件中添加 解析。仅使用 .config 文件添加行,如示例中所示 下面:

      #define NAME value
      

      【讨论】:

      • 无法编辑(编辑队列已满,所以我会发布一个工作链接作为评论):doc.qt.io/qtcreator/…
      猜你喜欢
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 2020-08-05
      • 2020-06-10
      • 2013-01-30
      相关资源
      最近更新 更多