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,提问作者Роман Немцов
相关产品推荐
相关产品推荐

