【发布时间】:2010-09-06 09:42:53
【问题描述】:
在 Eclipse 中,可以使用路径和符号中的符号选项为项目指定预处理定义(#ifdef 宏)。这有助于有效索引跨平台的代码。 Qt creator 中是否可以提供这些选项?
【问题讨论】:
标签: qt qt-creator
在 Eclipse 中,可以使用路径和符号中的符号选项为项目指定预处理定义(#ifdef 宏)。这有助于有效索引跨平台的代码。 Qt creator 中是否可以提供这些选项?
【问题讨论】:
标签: qt qt-creator
这取决于:-)
以下假设您使用的是基于 qmake 的项目:
首先您可以将DEFINES += SOME_DEFINE=value 添加到您的.pro 文件中。这是在 creator 内部和在命令行上构建时提取的,并且在从 .pro 文件创建 MSVC 或 XCode 项目时也应该显示出来。
然后您可以将DEFINES += SOME_DEFINE=value 添加到Qt Creator 在配置项目时将发出的qmake 调用中。这发生在项目模式、构建设置、QMake 步骤中。
最后,您可以将#define SOME_DEFINE 值留置权放入头文件并包含它。这适用于各种项目:-)
【讨论】:
定义在 .config 文件中指定。 .config 文件是一个 常规 C++ 文件,在所有源文件中添加 解析。仅使用 .config 文件添加行,如示例中所示 下面:
#define NAME value
也就是说,如果你导入一个名为 MyProject 的项目,那么预处理器定义应该在 MyProject.config 中指定
对于我的项目,它会导致索引器在整个项目范围内识别此定义并更改自动完成以反映这一点。
【讨论】:
.config 文件。如何找到它?文档链接似乎没有多大用处。
我认为最初的答案很好,但它们要求您手动管理您的配置,而有一些方法可以让 IDE自动根据是否选择了 release 或 debug 配置。
这部分可能是多余的,但请注意,只有当你使用 IDE 进行构建时,它才对你有用。显然,如果不是这种情况,您将需要一个不同的解决方案。
由于图片值一千字,下面是一个示例,说明如何使用 Qt Creator 4.3.1 为调试构建定义调试宏:
DEBUG 代表代码中的 #ifdef DEBUGs;在我的例子中是 __CTS_DEBUG__)宏现在只会在您使用调试配置时定义;当您选择 Release 配置(参见步骤 1)时,它将自动变为未定义,并且您的条件编译调试代码将被删除,如下图所示,这正是您一直想要的。
选择了调试配置
选择 release 配置:
【讨论】:
我想在 .pro 文件中指定一个#define 字符串,但我的代码以不带引号的字符串内容结束。我必须转义引号,然后转义转义以使一对引号一直持续到我的代码。这是因为 qmake 去掉了一组转义和一些引号,然后命令行去掉了其余的。这对我有用:
DEFINES += "VERSION=\"\\\"0.1.0\\\"\""
在 Windows 上,这个 VERSION 字符串可以在 .rc 文件中用于创建 Windows 需要的版本内容以及“关于”菜单的代码。
【讨论】:
qmake DEFINES+="BUILD_DATE='\'\"August 17, 2016\"\''"
您可以在 QtCreator 的项目设置中定义一些 PREPROCESSOR。我这里没有 QtCreator,但我记得有一个项目配置选项卡。
【讨论】:
@Tobias Hunger 回答的第一个建议对我有用。我在我的 .pro 文件中这样做:
DEFINE += KEY=value
直到我将其更改为:
DEFINES += KEY=value
也就是说,如果你想从命令行做所有事情,这里描述了一个几乎混合的解决方案,它不使用 Qt Creator GUI,但使用 .pro 文件:
https://www.linux.org/threads/c-tutorial-create-qt-applications-without-qtcreator.18409/
使用上面链接中描述的方法,您可以使用qtcreator -project 生成一个.pro 文件,然后使用notepad 或vim 或其他一些文本编辑器将DEFINES += KEY=value 行添加到@ 987654330@ 刚刚创建的文件。然后直接使用 qmake:qmake <your_project>.pro,进行 Qt 预处理,最后只需 make 构建可执行文件。
我还听说过使用qtcreator -D 选项从命令行添加预处理器定义的传说,如下所述:
https://doc.qt.io/archives/qt-4.8/qmake-variable-reference.html#defines
但我从未尝试过。
希望对你有用!您对 CLI 的奉献精神令人钦佩。
【讨论】: