【问题标题】:qmake "system" command always return success codeqmake "system" 命令总是返回成功码
【发布时间】:2014-11-20 10:33:32
【问题描述】:

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

附注我在 Windows 命令提示符下试了一下:findstr 正确设置 %errorlevel%1 时找不到指定的文本。

P.P.S 这是解决方法(只需使用其他版本的system):

!build_pass {
    win32 { 
         for( SRC_PATH, SOURCES ) {
             FULL_SRC_PATH = \"$$PWD/$$SRC_PATH\"
             FULL_SRC_PATH = $$replace( FULL_SRC_PATH, /, \ )

             FIND_RES = $$system( findstr \"MY_CUSTOM_MARKER\" $$FULL_SRC_PATH )
             !isEmpty( FIND_RES ) {
                 message( Processing $$SRC_PATH... )
                 system( MyExternalUtil $$FULL_SRC_PATH )
             }
         }
     }
 }

【问题讨论】:

    标签: windows qt build qt5 qmake


    【解决方案1】:
    defineTest(systemWrapper) {
        ret = $$system($${ARGS} 2> /dev/null; echo $?)
        equals(ret, 0):return(true)
        return(false)
    }
    

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2016-07-03
    • 2013-09-24
    相关资源
    最近更新 更多