我正在为一个复杂的Qt5程序编写自动构建系统。
其中一些C++源包含特殊标记,需要由外部实用程序处理。
所以我决定在 qmake 项目中编写一个自定义的预构建步骤,如下所示:
!build_pass {
win32 {
for( src, SOURCES ) {
system("findstr "MY_CUSTOM_MARKER" $$src"):system( MyExternalUtil $$src )
}
}
}
但是首先system
命令总是返回成功,即我的所有源都将被处理!
然而,官方的Qt文档说他们不应该。
所以我的问题是:为什么这样的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 )
}
}
}
}
defineTest(systemWrapper) {
ret = $$system($${ARGS} 2> /dev/null; echo $?)
equals(ret, 0):return(true)
return(false)
}