我的项目包含顶级目录proj
,其中包含子目录runtime
和test
。基本上,test
取决于runtime
,但它有点复杂。
预期行为:如果您修改runtime
中的文件,然后制作runtime
,然后制作test
,则应重建test
。
实际行为:对于test
,你会得到“make:没有为'first'做什么。”
以下是项目文件的相关摘录。
proj.pro:
test.depends = runtime
runtime.pro:
TEMPLATE = lib
CONFIG = no_link target_predeps staticlib
TARGET =
# Avoid building libruntime.a
QMAKE_AR_CMD = @true
QMAKE_RANLIB = @true
include(../proj.pri)
RUNTIME_SOURCES += \
foo.c
bar.c
proj.pri:
CLANG_RUNTIME_FLAGS = -emit-llvm
runtime.input = RUNTIME_SOURCES
runtime.output = lib${QMAKE_FILE_IN_BASE}.bc
runtime.commands = $$CLANG $$CLANG_RUNTIME_FLAGS -c ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
QMAKE_EXTRA_COMPILERS += runtime
在runtime
的Makefile中,目标compiler_runtime_make_all
的规则似乎与QMAKE_EXTRA_COMPILERS
相对应。此规则构建的文件(foo.bc和bar.bc)位于OBJECTS
列表中,因此在创建此Makefile时会构建它们。
在test
的Makefile中,还有一个针对目标compiler_runtime_make_all
的规则,但它没有配方,也没有在任何地方引用它。
那么我如何告诉test
它应该取决于QMAKE_EXTRA_COMPILERS
的{{1}}?
答案 0 :(得分:1)
在顶级proj.pro
(我假设为TEMPLATE = subdirs
)中,指定test
仅依赖于runtime
会影响订单其中顶级make
在指定的SUBDIRS
上运行。 不在任何子目录中引入任何其他依赖项 - 这些都是qmake
和make
完全独立的调用。
因此,要解决此问题,您需要test.pro
表明它所依赖的特定runtime
文件。请参阅POST_TARGETDEPS
变量。
或者,如果您使用QMAKE_EXTRA_COMPILERS
在test.pro
中构建源代码,则可以添加以下内容:
test.depends = $${ROOT}/runtime/lib*.bc