如何在QT中使用pro文件在重新编译时执行shell命令?

时间:2019-07-15 12:59:30

标签: c++ qt gcc makefile qmake

我正在开发一个库,每次重新编译代码(即每次更改二进制文件)时都试图运行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

2 个答案:

答案 0 :(得分:0)

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

  1. 在Qt Creator中,单击左侧的Projects
  2. 在工具箱中选择Build
  3. 单击下拉列表Add Build Step并选择Custom Build Step
  4. sh添加到Command
  5. 将脚本的路径添加到Arguments

答案 1 :(得分:0)

  

我也尝试使用QMAKE_POST_LINK,尽管存在相同的问题,但结果与预期的不同。

我真的不明白您可能会做错什么,但这应该可以解决:

QMAKE_POST_LINK=/bin/sh $$PWD/build_number.sh