我在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
。
如果是lib
或app
项目类型,则使用qmake变量POST_TARGETDEPS
复制任何额外的依赖项会更容易。
P.S。我还需要能够通过Visual Studio 9构建它。
答案 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
}