我试图通过将Qt项目中的内部版本号作为DEFINE来添加该内部版本号。我找到了一些示例,但似乎无法使它们正常工作。基本上,从命令行调用build.sh,并回显当前的内部版本号。该数字应在qmake中设置为#DEFINE,并包含在我的代码中

我在.pro文件中有以下代码

unix: {
    BUILDNO = $$system(./build.sh)
    DEFINES += BUILD_NUM=$${BUILDNO}
}
else:
    DEFINES += BUILD_NUM=0

而此代码在我的build.sh文件中
#!/bin/bash
n=25;#the variable that I want to be incremented
next_n=$[$n+1]
sed -i "/#the variable that I want to be incremented$/s/=.*#/=$next_n;#/" ${0}
echo $n

还有我代码中的示例行:
a.setApplicationVersion(QString("%1.%2.%3").arg(VERSION_MAJ).arg(VERSION_MIN).arg(BUILD_NUM));

从命令行运行build.sh脚本就可以了。它在命令行中回显单个数字,并在脚本中递增该数字。当我构建项目时,该数字会增加,因此我知道它正在执行。但是,当我打印DEFINE变量时,回显的数字没有显示在我的代码中。但是...在Linux上,它始终为0

最佳答案

您的.pro语法不正确,因为“else”命令不应使用“:”,而应使用“{}”,因此始终会覆盖前一个命令。

unix: {
    BUILDNO = $$system(sh $$(PWD)/build.sh)
    DEFINES += BUILD_NUM=$${BUILDNO}
}
else {
    DEFINES += BUILD_NUM=0
}

正如@Matt所指出的,如果命令位于同一行,则可以使用“:”:
unix: {
    BUILDNO = $$system(sh $$(PWD)/build.sh)
    DEFINES += BUILD_NUM=$${BUILDNO}
}
else: DEFINES += BUILD_NUM=0

10-06 00:54