Qt qmake处理我的pro文件三次,而不是一次

Qt qmake处理我的pro文件三次,而不是一次,qt,qmake,vcproj,Qt,Qmake,Vcproj,这是整个pro文件: message("This message should appeare only once!!!") CONFIG += qt SOURCES += src/main.cpp 我以以下方式调用qmake: set QMAKESPEC=win32-msvc2008 set QTDIR=c:\Qt\4.8.4_vs2008\ call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC

这是整个
pro
文件:

message("This message should appeare only once!!!")
CONFIG += qt
SOURCES += src/main.cpp
我以以下方式调用
qmake

set QMAKESPEC=win32-msvc2008
set QTDIR=c:\Qt\4.8.4_vs2008\

call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86
call "%QTDIR%\bin\qmake.exe" -tp vc Server.pro
我得到以下输出:

设置使用Microsoft Visual Studio 2008 x86工具的环境

项目消息:此消息只应出现一次

项目消息:此消息只应出现一次

项目消息:此消息只应出现一次


为什么要打印三次消息?

因为默认情况下,
qmake
将创建三个生成文件:
Makefile
Makefile.debug
Makefile.release
。这是因为默认配置是在调试和发布模式下构建项目。如果将
CONFIG-=debug\u和\u release
添加到
.pro
文件中,您应该只会看到一次消息。您可以找到更多信息并。

将此行添加到.pro文件中

CONFIG -= debug_and_release debug_and_release_target 
qmake只会生成一个Makefile,而.pro文件只会被计算一次。

实际上,除了qmake第一次解析.pro文件外,“build\u pass”条件始终为true,因此以下操作有效:

!build_pass:message("This message should appear only once")
我制作了一个助手函数,它在我的项目中运行良好:

defineTest(print) {
  !build_pass:message($$1)
}

print("This message should appear only once")

您可以这样做:

Release:message("This message should appeare only once!!!")
如果您处于relase模式,它将运行一次,以便调试更改为
debug:…