Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 运行qmake时如何将变量传递到qmake项目文件_C++_Qt_Qmake - Fatal编程技术网

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
其中没有一个有效

如何将定义传递给qmake,qmake将在Makefile中设置变量,即
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,这正是我想要的,但措辞不正确。此后,我对问题标题进行了编辑,使其更为恰当。