C++ 运行qmake时如何将变量传递到qmake项目文件
在项目文件上调用C++ 运行qmake时如何将变量传递到qmake项目文件,c++,qt,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") !d
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,我应该能够做到以下几点:
FLAVOR = xyz
!defined(APP_NAME) {
APP_NAME = $$FLAVOR
}
上述守则的目的:
检查是否定义了APP_名称(任何位置,甚至作为qmake
参数传递)。如果未定义,则将APP_NAME
设置为包含xyz的FLAVOR
我试过:
qmake-config debug“定义+=APP\u NAME=myappname”
qmake-config调试“APP\u NAME=myappname”
qmake-config调试应用程序\u NAME=myappname
APP\u NAME
,如上例所示?
请注意:一些答案建议使用问题标题。此后,我对标题进行了编辑,以更恰当地概括我的问题以及我希望实现的目标您可以将定义传递给qmake,如下所示:
qmake DEFINES+="APP_NAME myappname"
DEFINES += "APP_NAME=myappname"
如果要在pro文件中添加定义,请执行以下操作:
qmake DEFINES+="APP_NAME myappname"
DEFINES += "APP_NAME=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")
要使“defined”语句发挥作用,一个看似至关重要的变化是添加“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
//编辑:关于“defined”-语句,文档中说“[…]如果省略了type,则检查所有函数”,其中“type”是第二个参数。似乎是字面意思,即只检查函数,而不检查变量。
根据,第二个应该可以工作-除了他们显示的示例没有空格之外。你试过
qmake-config调试“APP\u NAME=myappname”
?还有,你在什么平台上运行?@MartinBonner我想我试过了。另外,在Ubuntu16.04.3 LTS上运行QMake3和Qt5.5。1@talamaki尽管问题标题可能会重复,但我的问题与相关理解不一致。另外,O正在寻找类似于qmake。。。foo=bar
其中foo在.pro
文件中使用,此副本未提供此类示例OK,您的问题中有动态方面。/home/cybex/Qt5.5.1/5.5/gcc_64/bin/qmake-config debug DEFINES+=“APP_NAME myappname”
产生与中所述相同的输出question@KGCybeX您正在询问如何在Makefile中设置定义,并且正在测试.pro文件的输出???如果您需要将值设置到.pro文件中,请使用qmake-project而不是qmake-config,talamaki给出的答案与您在question@KGCybeXqmake/.pro文件中的定义是关于要放入生成的Makefile中的预处理器定义。您的问题标题(在编译makefile时将定义添加到qmake项目文件)显然具有误导性。user2277520的答案显然就是您想要的。我更改了标题以更好地匹配问题。请注意,当变量像user2277520的答案一样添加时,它不会到达Makefile和预处理器,而是仅用于qmake,但这实际上是您需要的。感谢您的深入解释和建议!工作如预期@KGCybeX很乐意帮忙。现在已经很清楚,您不需要“预处理器定义”,这个问题的标题很容易引起误解。如果我没有完全错的话,您只想知道如何通过命令行参数为QMake项目文件分配变量。至少这就是我的答案。@user2277520,这正是我想要的,但措辞不正确。此后,我对问题标题进行了编辑,使其更为恰当。