2012-08-31 44 views
2

我的項目的頂級目錄proj與子目錄runtimetest。基本上,test取決於runtime,但它有點複雜。如何使一個目標取決於另一個目標的QMAKE_EXTRA_COMPILERS

預期的行爲:如果您在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_COMPILERSruntime

回答

1

在頂層proj.pro(我假定是TEMPLATE = subdirs),指定test取決於runtime影響,其中頂層make是在指定SUBDIRS運行的順序。它確實在而不是中引入了任何子目錄中的任何附加依賴關係 - 這些都是完全獨立的調用qmakemake

因此,要解決這個問題,你需要有test.pro註明具體runtime文件,這取決於。請參閱POST_TARGETDEPS變量。

或者,如果你使用QMAKE_EXTRA_COMPILERS打造的來源test.pro,您可以添加這樣的事情:

test.depends = $${ROOT}/runtime/lib*.bc 
相關問題