如何以依赖感知方式复制文件,同时考虑存在和时间戳
Posted
技术标签:
【中文标题】如何以依赖感知方式复制文件,同时考虑存在和时间戳【英文标题】:How to copy file(s) in a dependency-aware manner, taking existence and time stamp into account 【发布时间】:2014-10-06 11:49:05 【问题描述】:我在 qmake 中遇到了一个奇怪的问题。
我需要make
根据存在和时间戳的规则复制文件。我有 subdirs (TEMPLATE=subdirs
) 项目类型。我试过这个:
__file = script.py
__target_file = $$DESTDIR/$$__file
my_target.target = $$__target_file
my_target.commands = cp -f $$__file $$__target_file
my_target.depends = $$__file
all_target.target = all
all_target.depends = $$__target_file
QMAKE_EXTRA_TARGETS *= my_target all_target
我使用 GNU Make 为 Linux 和 Mac OS 构建这个项目。
这里的主要问题是 Makefile 以 all
目标的两条规则结束。第一个是
all: FORCE
第二个是我自定义的all_target
。
在这种情况下,make
调用不会产生任何结果,而make all
会执行all_target
。
如果是 lib
或 app
项目类型,使用 qmake 变量 POST_TARGETDEPS
复制任何额外的依赖项会更容易。
附:我还需要能够通过 Visual Studio 9 构建它。
【问题讨论】:
我设法使用first
目标为 GNU Make 解决了这个问题。不幸的是,它在 Visual Studio 中根本不起作用:(
【参考方案1】:
我必须将此项目作为 Visual Studio 9 的 lib-type 使用空源文件 stub.c
。并且每次script.py
发生变化时,使用黑客方法重新生成stub.c
。这很烦人。
.pro-file 的完整代码:
TARGET = my_module
win32: TEMPLATE = lib
else: TEMPLATE = subdirs
SCRIPT_MODULE_FILE = script.py
__file = ...
__target_file = ...
__copy_cmd = ...
win32
CONFIG *= staticlib
DESTDIR = ...
GENERATED_FILES = stub.c
my_target.input = SCRIPT_MODULE_FILE
my_target.output = stub.c
my_target.commands = $$__copy_cmd && copy /y nul stub.c > nul
QMAKE_EXTRA_COMPILERS *= my_target
else
my_target.target = $$__target_file
my_target.commands = $$__copy_cmd
my_target.depends = $$__file
first.depends = $(first) my_target
QMAKE_EXTRA_TARGETS *= first my_target
【讨论】:
以上是关于如何以依赖感知方式复制文件,同时考虑存在和时间戳的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 MVC 模型动态过滤 javafx 中的列表视图控件,同时以多种方式更新? [关闭]