我的项目有顶级目录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
,它应该依赖于runtime
的QMAKE_EXTRA_COMPILERS
呢?
在顶级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