c++ - qmake运行时如何将变量传递给qmake项目文件

标签 c++ qt qmake

我需要动态改变我的例如在我的项目文件上调用 qmake 时的应用程序名称和后续定义。

一个示例是:

include(version.pri)

QT       += core gui network concurrent

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
FLAVOR = ?

TARGET = ../bin/$$FLAVOR
TEMPLATE = app

message("Application name: $$APP_NAME")

!defined(APP_NAME) {
    APP_NAME = $$FLAVOR
}

!defined(APP_ORG) {
    APP_ORG = myorg
}

//...

message("Application name 2: $$APP_NAME")

输出

Application name:
Application name 2: ?

以上是我的项目文件的摘录。


文档:

根据Qmake documenation ,我应该能够执行以下操作:

FLAVOR = xyz

!defined(APP_NAME) {
    APP_NAME = $$FLAVOR
}

上述代码的用途:

检查 APP_NAME 是否已定义(任何位置,甚至作为 qmake 参数传递)。如果未定义,则将 APP_NAME 设置为等于包含 xyz

FLAVOR

我已经尝试过:

  • qmake -config debug "DEFINES += APP_NAME = myappname"
  • qmake -config debug "APP_NAME = myappname"
  • qmake -config debug APP_NAME = myappname

其中没有一个起作用。

如何将定义传递给 qmake 以在 Makefile 中设置变量,即 APP_NAME 如上例所示?

请注意:一些答案​​表明问题标题存在问题。此后,我将标题编辑为更适合我的问题和我希望实现的目标的摘要

最佳答案

我假设您不是尝试添加定义(如在预处理器定义中,传递给编译器),而是“分配”变量以在 QMake 项目文件中使用。

以下内容对我有用:

QT       += core gui network concurrent

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
FLAVOR = ?

TARGET = ../bin/$$FLAVOR
TEMPLATE = app

message("Application name: $$APP_NAME")

!defined(APP_NAME, var) {
    APP_NAME = $$FLAVOR
}

message("Application name 2: $$APP_NAME")

如您所见,使“已定义”语句起作用的一个看似重要的更改是添加“var”作为第二个参数。不知道为什么,但如果没有它,第二个输出是“?”,而第一个输出是正确的“myappname”。

qmake 的输出是:

...\Desktop\test_qmake>qmake -config debug "APP_NAME = myappname"
Project MESSAGE: Application name: myappname
Project MESSAGE: Application name 2: myappname
Project MESSAGE: Application name: myappname
Project MESSAGE: Application name 2: myappname
Project MESSAGE: Application name: myappname
Project MESSAGE: Application name 2: myappname

...\Desktop\test_qmake>qmake -v
QMake version 3.0
Using Qt version 5.7.1 in C:/Qt/5.7/mingw53_32/lib

//编辑:关于“定义”语句,文档说“[...]如果省略类型,则检查所有函数。”,其中“类型”是第二个参数。似乎是按字面意思理解的,即只检查函数,但不检查变量。 QMake function reference "defined"

关于c++ - qmake运行时如何将变量传递给qmake项目文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48461435/

相关文章:

c++ - 使用 vector 进行 gsl 线性拟合

c++ - for循环中的RSA mpz_powm() : seg fault

c++ - CONFIG += c++11(仍然)在 Linux 上不起作用

c++ 构造函数行为

c++ - LibHaru 中的文本换行

c++ - Qt C++ : Connect call fails in header in dynamic library

c++ - Qt QPixmap指针限制

linux - kdevelop智能感知

qt - 在 Qt 中,什么时候应该使用 RESOURCES、DISTFILES 和 OTHER_FILES

c++ - undefined reference EVP_sha1 、HMAC、Id 返回 1 退出状态