这是用于设置MacOSX应用程序的应用程序包。我有一个脚本可以复制一些文件并执行其他一些操作。所以我想在构建之后(即在链接步骤之后)执行脚本。我希望它每次都执行,因为无法指定它的依赖关系。
我知道有QMAKE_POST_LINK
(例如描述为here或here)但它仅在目标不存在时运行,即需要进行链接时才运行。但是,我希望每次都运行脚本,也就是当目标已经存在时。
还有QMAKE_EXTRA_TARGETS
和POST_TARGETDEPS
(例如描述为here)但是它会一直强制重新链接但我实际上只希望脚本重新运行并且它在运行之前运行脚本链接。 (目前,这就是我正在使用的东西,因为我没有看到更好的方法。Here是我的QMake来源。)
答案 0 :(得分:0)
编辑:看起来在最后版本的Qt构建的依赖项中运行在并行中,所以这个解决方案不起作用。按给定顺序制作东西的另一种方法是使用空的“超级” 目标:
super.depends = target_pre first target_post QMAKE_EXTRA_TARGETS += super
其中
first
- 是默认的qmake目标,target_pre
和target_post
一些自定义目标。现在make super
就是这样做的。
答案 1 :(得分:0)
在过去的几个月中,我已经花了几天的时间来解决这个问题,但我还没有找到“纯粹的”解决方案。但是,FWIW,如果您不介意每次都强制进行重新链接的技巧,请按以下步骤操作:
(“构建后事件”的这种实现类似于“构建前事件”的this的实现。)
注意事项:
仅适用于具有链接步骤的项目,因此不适用
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)