You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt项目影子目录BUILD变量赋值及编译启动异常解决问询

问题背景与初始配置

在Windows平台的Qt Creator项目目录下,存在build.txt文件,内容如下:

7

另有批处理文件build_inc.bat,内容如下:

@echo off 
set /p var= <build.txt 
Set /A var= var+1 
echo %var% >build.txt
echo #define BUILD %var% >build.h
echo %var%

项目的*.pro文件内容:

Release:QT       += core gui
Release:greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

Release:build_nr.commands = $$PWD/build_inc.bat
Release:build_nr.depends = FORCE
Release:QMAKE_EXTRA_TARGETS += build_nr
Release:PRE_TARGETDEPS += build_nr

Release:BUILD = $$cat(build.txt)

Release:message( $${BUILD} )
Release:TARGET = my_proj_$${BUILD}

Release:TEMPLATE = app
Release:DEFINES += QT_DEPRECATED_WARNINGS
Release:CONFIG += c++11
Release:SOURCES += \
        main.cpp \
        mainwindow.cpp
Release:HEADERS += \
        mainwindow.h
Release:FORMS += \
        mainwindow.ui

当前运行现象

点击运行后,影子目录生成my_proj_7.exe;同时影子目录中被复制了build.txt,内容变为:

1

再次点击运行,可执行文件名称未改变,但影子目录中build.txt内容变为:

2

项目目录下的build.txt内容始终保持为7。

期望行为

每次点击运行按钮时,生成文件名末尾带有递增编号的可执行文件,例如my_proj_1、my_proj_2、my_proj_3等。

核心疑问

如何让*.pro文件中的BUILD变量读取影子目录下build.txt的内容,而非项目目录下的该文件?

后续修改与异常情况(2024年4月15日)

修改后的build_inc.cmd内容:

@echo off 
if exist build.h (for /F "tokens=3" %%I in (build.h) do set BuildNumber=%%I) else set BuildNumber=0
if "%~1" == "/R" ren %2 "%~n2_%BuildNumber%%~x2" & exit /B
set /A BuildNumber+=1
1>build.h echo #define BUILD %BuildNumber%

修改后的my_proj.pro文件内容:

Release:QT       += core gui
Release:greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

Release:build_nr.commands = $$PWD/build_inc.cmd
Release:build_nr.depends = FORCE
Release:QMAKE_EXTRA_TARGETS += build_nr
Release:PRE_TARGETDEPS += build_nr

Release:TARGET = my_proj

QMAKE_POST_LINK = $$PWD/build_inc.cmd /R ${DESTDIR}\${TARGET}
#QMAKE_POST_LINK = %ComSpec% /c D:\QT_proj\my_proj\my_proj\build_inc.cmd /R my_proj.exe
Release:TEMPLATE = app
Release:DEFINES += QT_DEPRECATED_WARNINGS
Release:CONFIG += c++11
Release:SOURCES += \
        main.cpp \
        mainwindow.cpp
Release:HEADERS += \
        mainwindow.h
Release:FORMS += \
        mainwindow.ui

编译与运行异常

编译输出出现多个编译终止错误,例如:

..\my_proj\main.cpp:11:1: fatal error: error closing -: Invalid argument

进程mingw32-make.exe退出码为2;运行时提示程序无法启动,存在路径或权限问题。


内容的提问来源于stack exchange,提问作者Роман Немцов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:35:27