如何制作目标取决于另一个目标的QMAKE_EXTRA_COMPILERS

时间:2012-08-31 20:36:57

标签: qt qmake

我的项目包含顶级目录proj,其中包含子目录runtimetest。基本上,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}}?

1 个答案:

答案 0 :(得分:1)

在顶级proj.pro(我假设为TEMPLATE = subdirs)中,指定test仅依赖于runtime 会影响订单其中顶级make在指定的SUBDIRS上运行。 在任何子目录中引入任何其他依赖项 - 这些都是qmakemake完全独立的调用。

因此,要解决此问题,您需要test.pro表明它所依赖的特定runtime文件。请参阅POST_TARGETDEPS变量。

或者,如果您使用QMAKE_EXTRA_COMPILERStest.pro中构建源代码,则可以添加以下内容:

test.depends = $${ROOT}/runtime/lib*.bc