我需要动态更改我的在我的项目文件上调用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
设置为等于FLAVOR
,其中包含xyz
我尝试过:
qmake -config debug "DEFINES += APP_NAME = myappname"
qmake -config debug "APP_NAME = myappname"
qmake -config debug APP_NAME = myappname
其中无效。
如何将定义传递给qmake,它将在Makefile中设置一个变量,即APP_NAME
,如上例所示?
请注意:一些答案表明问题标题存在问题。我已经将标题编辑为更合适的问题摘要以及我希望实现的目标
答案 0 :(得分:3)
我假设您没有尝试添加DEFINES(如在预处理器中定义,传递给编译器),而是在" assign"在QMake项目文件中使用的变量。
以下适用于我:
function lcm(n1, n2) {
n1 = bigInt(n1).value; //bigInt comes from the big-integer library
n2 = bigInt(n2).value;
let smaller = bigInt.min(n1, n2);
let bigger = bigInt.max(n1, n2);
let s1 = smaller;
if (smaller === 1) {
return bigger;
} else if (bigger === 1) {
return smaller;
}
while (s1 % bigger !== 0) { //once s1 % bigger is 0, we found the lcm in s1's variable
s1 = bigInt(s1).add(smaller);
console.log(s1);
}
return s1;
}
使定义" -statement工作的一个看似至关重要的变化是添加" var"作为第二个参数,如您所见。不知道为什么,但没有它,第二个输出是"?",而第一个输出正确" myappname"。
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")
//编辑:关于"定义" -statement,文档说" [...]如果省略类型,检查所有函数。",其中&#34 ;类型"是第二个参数。似乎是字面意思,即只检查功能,但没有变量。 QMake function reference "defined"
答案 1 :(得分:1)
您可以将定义传递给qmake,如下所示:
qmake DEFINES+="APP_NAME myappname"
如果你想在专业文件中添加定义,你会喜欢这样:
DEFINES += "APP_NAME=myappname"