QMake:构建后执行脚本

时间:2014-02-03 12:56:08

标签: makefile qmake

这是用于设置MacOSX应用程序的应用程序包。我有一个脚本可以复制一些文件并执行其他一些操作。所以我想在构建之后(即在链接步骤之后)执行脚本。我希望它每次都执行,因为无法指定它的依赖关系。

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

还有QMAKE_EXTRA_TARGETSPOST_TARGETDEPS(例如描述为here)但是它会一直强制重新链接但我实际上只希望脚本重新运行并且它在运行之前运行脚本链接。 (目前,这就是我正在使用的东西,因为我没有看到更好的方法。Here是我的QMake来源。)

2 个答案:

答案 0 :(得分:0)

有相关问题therethere。我引用他的第一个答案:

  

按给定顺序制作东西的另一种方法是使用空的“超级”   目标:

super.depends = target_pre first target_post
QMAKE_EXTRA_TARGETS += super
     

其中first - 是默认的qmake目标,target_pre和   target_post一些自定义目标。现在make super就是这样做的。

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

答案 1 :(得分:0)

在过去的几个月中,我已经花了几天的时间来解决这个问题,但我还没有找到“纯粹的”解决方案。但是,FWIW,如果您不介意每次都强制进行重新链接的技巧,请按以下步骤操作:

(“构建后事件”的这种实现类似于“构建前事件”的this的实现。)

注意事项:

  • 强制每次重新链接
  • 仅适用于具有链接步骤的项目,因此不适用 TEMPLATE=auxTEMPLATE=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)