2

proj我的项目具有带有子目录的顶级目录runtimetest. 基本上,test取决于runtime,但它有点复杂。

预期的行为:如果你修改了一个文件runtime,然后make runtime,然后make test,这应该重建test

实际行为:对于test,你会得到“make:Nothing to be done for `first'”。

以下是项目文件的相关摘录。

proj.pro:

test.depends = 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 中,还有一个 target 的规则compiler_runtime_make_all,但它没有配方,也没有在任何地方引用。

那么我怎么知道test它应该取决于QMAKE_EXTRA_COMPILERSfor runtime

4

1 回答 1

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
于 2012-08-31T22:57:23.007 回答