我正在开发一个库,每次重新编译代码(即每次更改二进制文件)时都试图运行shell脚本时遇到了问题。

我在带有GCC 64位的ubuntu上运行Qt Creator 4.9.2(基于QT 5.12.4)

我尝试使用.commands和QMAKE_EXTRA_TARGETS运行与POST_TARGETDEPS组合的自定义目标,尽管它不起作用。
我也尝试使用QMAKE_POST_LINK,尽管存在相同的问题,但结果与预期的不一样。
当前,该脚本仅在更改.pro文件时执行(并且执行两次而不是执行一次),并且在第一次编译时才保持不变。

我不知道这是否相关,但是我的项目是由一个库和一个我使用SUBDIRS依赖的测试代码组成的。
该体系结构是一个Global文件夹,其中包含一个.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:

https://github.com/MMinie/testSHELL

最佳答案

也许您可以在Qt Creator中添加自定义构建步骤。
可以通过以下方式完成:

  • 在Qt Creator中,单击左侧的Projects
  • 在您的工具包中选择Build
  • 单击下拉Add Build Step并选择Custom Build Step
  • sh添加到Command中。
  • 将脚本的路径添加到Arguments
  • 关于c++ - 如何在QT中使用pro文件在重新编译时执行shell命令?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57040289/

    10-11 22:13
    查看更多