将自定义命令添加到qmake中的现有目标

杰森c

有没有一种方法可以在.pro文件中指定要添加到生成Makefile的标准目标的其他命令qmake例如,考虑distclean,可能需要其他命令来:

  • 删除*〜文件。
  • 从源树中清除运行时生成的输出文件。
  • 等等。

我想使用普通目标而不是自定义目标,因为我希望它在我的工作流程中是完全透明的。那是(再次distclean用作示例),我不想...

  • ...需要在多项目设置中了解某些Makefile使用自定义规则而不是distclean
  • ...记录自定义规则,甚至对于独立项目也是如此,这distclean已经众所周知并且很直观

我发现了如何在qmake生成的Makefile中添加自定义目标?,但这种描述添加自定义的目标(这是已经记录在案,甚至早在4.6),而不是将规则添加到现有的目标。尽管确实包含一些提示,但所有提示都需要添加新的自定义目标,因为在Makefile中多次指定同一目标会替换(而非添加)来自先前目标的命令。

我唯一想到的就是尝试target.commands += new commands.pro文件添加为一个疯狂的猜测(例如distclean.commands += rm \"*~\")。这没有作用。

如何使用透明地向现有目标添加自定义命令qmake


对于distclean例如:虽然maintainer-clean也是“标准的目标”清单上,在实践中我发现它很少使用,并且在任何情况下,qmake默认情况下不产生它; 我认为这不合适。

杰森c

有两种简单的方法可以完成此任务,具体取决于您希望解决方案的独立性/可移植性以及对命令执行顺序的宽容度。


选项1

第一种选择是在.pro文件中为新命令创建一个自定义目标,然后将该目标作为前提条件添加到要修改的标准目标中。回到distclean示例,假设您要添加一条命令以删除所有*〜文件:

  1. 在您的.pro文件中创建一个自定义目标请注意,您必须在.pro文件中转义引号和斜杠例如,添加:

    extraclean.commands = find . -name \"*~\" -exec rm -v {} \\;
    
  2. 将此目标添加为要修改的目标的依赖项:

    distclean.depends = extraclean
    

    实际上,这实际上还不会修改distclean规则,因为该方法不能用于修改现有规则。然而...

  3. 将新目标和要修改的目标都添加为额外目标:

    QMAKE_EXTRA_TARGETS += distclean extraclean
    

    这将添加第二个规范distcleanMakefile,但是这个作品,因为你可以添加依赖于现有的指标make在不同的规则,即使你不能添加命令那样如果还要distclean.commands.pro文件中指定,则可以distclean通过替换其默认配方来破坏现有文件

因此,将所有内容放到.pro文件中:

extraclean.commands = find . -name \"*~\" -exec rm -v {} \\;
distclean.depends = extraclean
QMAKE_EXTRA_TARGETS += distclean extraclean

extraclean您要添加命令的一些自定义目标在哪里,并且distclean是您想要修改的现有目标。

优点:

  • 完全独立于.pro文件。
  • 尽可能使您可移植,将实际的Makefile语法和生成保留为qmake

缺点:

  • 您的新命令不会追加到现有配方中。而是在满足所有先决条件目标之后但现有配方之前发生。distclean示例中,使用的qmake是我使用的版本,这会将命令放置在源代码树干净之后但删除Makefile本身之前(这是默认配方所采取的唯一操作)。对于此示例,这不是问题,但可能对您来说是一个问题。

选项2

第二个选项是改变名称的Makefileqmake生成,并创建自己的自定义的Makefile推迟到生成的一个,而不是包括+覆盖它。这也是一个简单的选择。虽然不像选项1那样独立,但它使您能够在默认生成的配方之前和之后执行命令。

您不想包括+覆盖现有的Makefile,因为您不想替换默认配方。如果这样做,则必须重新实施默认设置,但这可能是一个问题,因为该默认设置可能会更改(并且您必须跟上所做的更改)。最好让qmake我们尽可能多地工作,而不要重复工作。

去做这个:

  1. 首先,更改qmake生成的文件的名称这可以通过在.pro文件中添加如下一行来实现

    MAKEFILE = RealMakefile
    

    这将导致qmake输出RealMakefile而不是Makefile

  2. 下一步是Makefile使用自定义命令创建自己的命令。但是,这里有一些警告。首先,是一个完整的示例,再次使用distclean在名为的文件中Makefile

    .DEFAULT_GOAL := all
    
    %:
        @$(MAKE) -f RealMakefile $@
    
    distclean:
        @$(MAKE) -f RealMakefile $@ 
        @find . -name "*~" -exec rm -v {} \;
    

    关于此的一些注意事项:

    • 我们设置.DEFAULT_GOAL是因为否则distclean将是默认设置。如果您不满意,则另一种选择.DEFAULT_GOAL是指定一条all规则@$(MAKE) -f RealMakefile $@作为配方。
    • %目标匹配是不是否则在此定义的任何目标的Makefile它只是将处理委托给RealMakefile
    • distclean目标是我们添加我们的命令。我们仍然需要委托给RealMakefile,但是可以在发生这种情况之前和之后添加其他命令。

优点:

  • 对命令顺序的更多控制。可以在默认配方之前和之后添加命令。

缺点:

  • 不独立于.pro
  • 不那么可移植:不会使所有Makefile生成到qmake,并且我实际上也不确定make在这里哪些部分特定于GNU (欢迎发表评论)。

因此,虽然这个答案可能有点长,但是这两种方法都非常简单。除非命令执行顺序有问题,否则我希望使用选项1。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Java将自定义字段添加到Salesforce中的现有对象

来自分类Dev

将自定义函数添加到 Python 中的现有类

来自分类Dev

将自定义命令添加到 gradle 脚本

来自分类Dev

将自定义字段添加到Dokan上的现有表单(wordpress / woocoomerce)

来自分类Dev

将自定义样式添加到Mahapps.Metro现有样式

来自分类Dev

Rails将自定义路由添加到现有资源

来自分类Dev

将自定义字段添加到现有视图的问题

来自分类Dev

在运行目标之前将自定义jar添加到ant的classpath中

来自分类Dev

在qmake中添加自定义目标

来自分类Dev

将自定义标头添加到所有模块中的所有资源

来自分类Dev

将自定义标头添加到.Net中的所有Swagger响应中

来自分类Dev

将自定义标头添加到.Net中的所有Swagger响应中

来自分类Dev

将自定义http标头添加到所有jQuery AJAX请求中

来自分类Dev

将自定义指令添加到已具有角度指令[ng-model / ng-required]的现有输入中

来自分类Dev

Magento-将自定义块添加到目录产品编辑视图中的现有选项卡

来自分类Dev

将自定义变量添加到现有类(如UIButton)的正确方法是什么?

来自分类Dev

CMake:将子目录添加到自定义目标,并将自定义目标添加到VS解决方案

来自分类Dev

将自定义Symfony控制台命令添加到Doctrine ORM

来自分类Dev

将自定义标头添加到“请求”

来自分类Dev

Hibernate将自定义前缀添加到目录

来自分类Dev

将自定义函数添加到类

来自分类Dev

将自定义类添加到引导按钮

来自分类Dev

将自定义键绑定添加到XCode

来自分类Dev

无法将自定义字体添加到Xcode

来自分类Dev

将自定义属性添加到Serilog

来自分类Dev

pyqt:将自定义列添加到QFileSystemModel

来自分类Dev

将自定义视图添加到警报视图

来自分类Dev

将自定义别名添加到.zshrc

来自分类Dev

将自定义标签添加到TIFF文件

Related 相关文章

  1. 1

    如何使用Java将自定义字段添加到Salesforce中的现有对象

  2. 2

    将自定义函数添加到 Python 中的现有类

  3. 3

    将自定义命令添加到 gradle 脚本

  4. 4

    将自定义字段添加到Dokan上的现有表单(wordpress / woocoomerce)

  5. 5

    将自定义样式添加到Mahapps.Metro现有样式

  6. 6

    Rails将自定义路由添加到现有资源

  7. 7

    将自定义字段添加到现有视图的问题

  8. 8

    在运行目标之前将自定义jar添加到ant的classpath中

  9. 9

    在qmake中添加自定义目标

  10. 10

    将自定义标头添加到所有模块中的所有资源

  11. 11

    将自定义标头添加到.Net中的所有Swagger响应中

  12. 12

    将自定义标头添加到.Net中的所有Swagger响应中

  13. 13

    将自定义http标头添加到所有jQuery AJAX请求中

  14. 14

    将自定义指令添加到已具有角度指令[ng-model / ng-required]的现有输入中

  15. 15

    Magento-将自定义块添加到目录产品编辑视图中的现有选项卡

  16. 16

    将自定义变量添加到现有类(如UIButton)的正确方法是什么?

  17. 17

    CMake:将子目录添加到自定义目标,并将自定义目标添加到VS解决方案

  18. 18

    将自定义Symfony控制台命令添加到Doctrine ORM

  19. 19

    将自定义标头添加到“请求”

  20. 20

    Hibernate将自定义前缀添加到目录

  21. 21

    将自定义函数添加到类

  22. 22

    将自定义类添加到引导按钮

  23. 23

    将自定义键绑定添加到XCode

  24. 24

    无法将自定义字体添加到Xcode

  25. 25

    将自定义属性添加到Serilog

  26. 26

    pyqt:将自定义列添加到QFileSystemModel

  27. 27

    将自定义视图添加到警报视图

  28. 28

    将自定义别名添加到.zshrc

  29. 29

    将自定义标签添加到TIFF文件

热门标签

归档