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

标签 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 使它们成为依赖项。 该体系结构是一个全局文件夹,包含一个 .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 中添加自定义构建步骤。
可以通过以下方式完成:

  1. 在 Qt Creator 中点击左侧的 Projects
  2. 在您的套件中选择Build
  3. 点击下拉菜单 Add Build Step 并选择 Custom Build Step
  4. sh 添加到命令
  5. 将脚本的路径添加到Arguments

关于c++ - 如何在QT中使用pro文件重新编译时执行shell命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57040289/

相关文章:

c++ - 访问模板基类函数指针类型

qt - 如何在 Qt C++ 中使用 QSqlQuery 在 QDateTime 中获取毫秒数?

c++ - QFile::open 以 unicode 文件名失败

c - 不会创建简单的文本文件 [C,GCC]

c - 为什么 GCC 不优化对 printf 的调用?

c++11 - 禁用 gcc 中的覆盖检查

c++ - 将命令行字符串 lpszCmdLine 传递给 C 中的 WM_CREATE

c++ - WM_KEYDOWN如何处理不同的按键?

c++ - 无法使用 MinGW 在 Linux 上为 Windows 构建

python - 如何使用嵌入式 python 解释器构建和执行 cpp 文件(pybind11)