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



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

在顶级proj.pro(我假设它是TEMPLATE = subdirs)中,指定test仅依赖于runtime会影响顶级make在指定的SUBDIRS上运行的顺序。它没有在任何子目录中引入任何额外的依赖项——这些都是qmakemake的完全独立调用。

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

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

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

相关内容

最新更新