簡體   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