我正在开发一个库,每次重新编译代码(即每次更改二进制文件)时,我都在尝试运行 shell 脚本时遇到问题。
我在 GCC 64 位的 ubuntu 上运行 Qt Creator 4.9.2(基于 QT 5.12.4)
我曾尝试使用 .commands 和 QMAKE_EXTRA_TARGETS
运行自定义目标并结合 POST_TARGETDEPS
尽管它不起作用。
我也试过使用 QMAKE_POST_LINK
虽然有同样的问题,但结果与预期的不一样。
目前,脚本仅在我更改 .pro 文件时执行(并且它执行两次而不是一次)并且在第一次编译时,它保持不变。
我不知道这是否相关,但我的项目由一个库和一个测试代码组成,我使用 SUBDIRS
使它们成为依赖项。
该体系结构是一个全局文件夹,包含一个 .pro 文件和两个子文件夹(库和测试代码),当我编译全局项目时,库在测试应用程序之前编译。
我已经尝试过这些帖子中的解决方案:
How to execute shell command after compile finished from .pro in QT?
QMake: execute script after build
https://www.qtcentre.org/threads/46285-How-to-add-the-auto-quot-build-number-quot-in-Qt-Application
我目前使用的代码如下:
mytarget.commands = @echo $$system($$PWD/build_number.sh)
mytarget.depends = FORCE
QMAKE_EXTRA_TARGETS += mytarget
POST_TARGETDEPS += mytarget
我希望脚本只在库更改时运行一次,即仅在代码被修改时运行一次。
编辑: 项目的详细结构如下:
/TestProject
|--- testProject.pro
|--- API //this project creates a dynamic library which is exported in testApp project
|--- api.pro //where I am trying to run a script
|--- ... (source files of lib)
|--- testApp //uses the library previously generated by the API
|--- testApp.pro
|--- ... (source files of app)
API与testApp的依赖关系在testProject.pro中配置如下:
TEMPLATE = subdirs
SUBDIRS = \
Api \
testApp
Api.subdir = API
testApp.subdir = testApp
testApp.depends = Api
使用脚本的空白项目的 GITHUB :
最佳答案
也许您可以在 Qt Creator 中添加自定义构建步骤。
可以通过以下方式完成:
- 在 Qt Creator 中点击左侧的
Projects
。 - 在您的套件中选择
Build
- 点击下拉菜单
Add Build Step
并选择Custom Build Step
- 将
sh
添加到命令
。 - 将脚本的路径添加到
Arguments
关于c++ - 如何在QT中使用pro文件重新编译时执行shell命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57040289/