繁体   English   中英

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

[英]How to pass variables to qmake project file when qmake is run

在项目文件上调用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

请注意一些答案表明问题标题存在问题。 从那以后,我对标题进行了编辑,以更恰当地总结我的问题以及我希望实现的目标

我假设您不是要添加定义(如在预处理程序定义中一样,传递给编译器),而是要“分配”变量以在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

//编辑:关于“已定义”语句,文档说“ [...]如果省略type,则检查所有函数。”,其中“ type”是第二个参数。 似乎是从字面上看,即仅检查函数,而不检查变量。 QMake函数参考“已定义”

您可以像这样将定义传递给qmake:

qmake DEFINES+="APP_NAME myappname"

而且,如果您想在pro文件中添加定义,您可以这样做:

DEFINES += "APP_NAME=myappname"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM