qmake“system”命令总是返回成功代码

时间:2014-11-20 10:33:33

标签: windows qt build qt5 qmake

我正在为一个复杂的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

2 个答案:

答案 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脚本的其余变量。