我需要动态改变我的例如在我的项目文件上调用 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/