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

时间:2018-01-26 12:31:58

标签: 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")

!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,如上例所示?

请注意一些答案​​表明问题标题存在问题。我已经将标题编辑为更合适的问题摘要以及我希望实现的目标

2 个答案:

答案 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"