如何以依赖性感知的方式复制文件,考虑存在和时间戳

时间:2014-10-06 11:49:06

标签: qt qmake

我在qmake遇到了一个奇怪的问题。 我需要make根据存在和时间戳的规则复制文件。我有子目录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

如果是libapp项目类型,则使用qmake变量POST_TARGETDEPS复制任何额外的依赖项会更容易。

P.S。我还需要能够通过Visual Studio 9构建它。

1 个答案:

答案 0 :(得分:0)

我必须将此项目作为具有空源文件stub.c的Visual Studio 9的lib-type。每次stub.c更改时,使用黑客方法重新生成script.py。这很烦人。

.pro文件的完整代码:

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
}