我正在为一个复杂的Qt5程序编写自动构建系统 其中一些C ++源包含特殊标记,需要由外部实用程序处理 所以我决定在qmake项目中编写一个自定义预建步骤,如下所示:
!build_pass {
win32 {
for( src, SOURCES ) {
system("findstr \"MY_CUSTOM_MARKER\" $$src"):system( MyExternalUtil $$src )
}
}
}
但是第一个system
命令总是返回成功,即我的所有来源都将被处理!
但是,official Qt documentation say they should not。
所以我的问题是:为什么这样的system
命令总是返回0
?
P.S。我在Windows命令提示符下尝试了它:findstr
在未找到指定文本时正确设置%errorlevel%
。
P.P.S以下是解决方法(只使用其他版本的1
):
system
答案 0 :(得分:1)
defineTest(systemWrapper) {
ret = $$system($${ARGS} 2> /dev/null; echo $?)
equals(ret, 0):return(true)
return(false)
}
答案 1 :(得分:0)
使用qmake,您可以在内部评估任何字符串,包括来自OS环境的字符串。 例如contains函数。我试图避免通过操作系统进行长途检查,以便在工具能够做得更好的时候检查。并且处理OS环境也很容易。 OS环境变量只是qmake的一个变量,其中$$前缀是build .pro脚本的其余变量。