Makefile QMake:在生成后执行脚本

Makefile QMake:在生成后执行脚本,makefile,qmake,Makefile,Qmake,这用于设置MacOSX应用程序的应用程序包。我有一个脚本,它可以复制一些文件并做一些其他的事情。因此,我希望在构建之后(即链接步骤之后)执行脚本。我希望每次都执行它,因为不可能指定它的依赖项 我知道有QMAKE_POST_LINK(如描述或),但它仅在目标不存在时运行,即需要进行链接时。但是,我希望脚本每次都运行,也希望在目标已经存在时运行 还有QMAKE_EXTRA_TARGETS和POST_TARGETDEPS(如所述),但这会一直强制重新链接,但实际上我只希望脚本重新运行,并在链接之前运行

这用于设置MacOSX应用程序的应用程序包。我有一个脚本,它可以复制一些文件并做一些其他的事情。因此,我希望在构建之后(即链接步骤之后)执行脚本。我希望每次都执行它,因为不可能指定它的依赖项

我知道有
QMAKE_POST_LINK
(如描述或),但它仅在目标不存在时运行,即需要进行链接时。但是,我希望脚本每次都运行,也希望在目标已经存在时运行


还有
QMAKE_EXTRA_TARGETS
POST_TARGETDEPS
(如所述),但这会一直强制重新链接,但实际上我只希望脚本重新运行,并在链接之前运行脚本。(目前,这正是我正在使用的,因为我看不到更好的方法。这是我的QMake源代码。)

有相关的问题和建议。我引用我对第一个问题的回答:

另一种按给定顺序排列的方法是使用空的“super” 目标:

super.depends = target_pre first target_post
QMAKE_EXTRA_TARGETS += super
其中,
first
-是默认的qmake目标,
target\u pre
target\u post
一些自定义目标。现在
make super
就这么做吧


编辑:看起来在Qt的最新版本中,依赖项的构建是并行运行的,所以这个解决方案不起作用

在过去的几个月里,我已经为这件事挠头好几天了,但我还没有找到一个“纯”的解决方案。然而,FWIW,如果你不介意每次强制重新链接的黑客行为,下面是如何做到这一点:

(此“生成后事件”的实现类似于“生成前事件”的实现。)

注意事项:

  • 力量每次都会重新连接
  • 仅适用于具有链接步骤的项目,因此
    TEMPLATE=aux
    TEMPLATE=subdirs

    FORCELINK_CPP_FILE = force_link.cpp
    
    #This batch of statements causes the dummy file to be touched each build.
    forcelink.target = $$FORCELINK_CPP_FILE
    #FORCE is a nonexistent target, which will cause Make to always re-execute the recipe.
    forcelink.depends = FORCE
    forcelink.commands = touch $$FORCELINK_CPP_FILE
    QMAKE_EXTRA_TARGETS += forcelink
    
    #This statement ensures that touching the above file at Make time will force relinking.
    SOURCES += $$FORCELINK_CPP_FILE
    
    #QMake will complain unless the file actually exists at QMake time,
    # too, so we make sure it does.
    #I used to touch this on QMake build_pass runs, too,
    # but it caused transient access-denied errors.
    # I guess the release and debug makefiles are generated in parallel.
    !build_pass : write_file($$FORCELINK_CPP_FILE)
    

我觉得这里有个好主意。让
target\u post
首先依赖于
等,让
super
依赖于
target\u post
难道不管用吗?