2

私のプロジェクトにはproj、サブディレクトリruntimetest. 基本的には にtest依存しますruntimeが、少し複雑です。

予想される動作: でファイルを変更しruntime、次に make runtime、次に makeを実行すると、ファイルtestが再構築されtestます。

実際の動作: の場合test、「make: `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 には、 に対応していると思われる target のルールがありcompiler_runtime_make_allますQMAKE_EXTRA_COMPILERS。このルールでビルドされたファイル (foo.bc と bar.bc) はOBJECTSリストにあるので、この Makefile を作成するとビルドされます。

testの Makefile には、 target のルールもありますがcompiler_runtime_make_all、レシピがなく、どこにも参照されていません。

では、 fortestに依存する必要があることをどのように伝えるのですか?QMAKE_EXTRA_COMPILERSruntime

4

1 に答える 1

1

最上位proj.pro(これは であると想定していますTEMPLATE = subdirs) では、test依存先を指定すると、指定された で最上位が実行される順序にruntime のみ影響します。サブディレクトリのいずれにも追加の依存関係は導入されませ。これらはすべて完全に独立したおよびの呼び出しです。makeSUBDIRSqmakemake

したがって、これを解決するには、依存するtest.pro特定のファイルを示す必要があります。変数runtimeを参照してください。POST_TARGETDEPS

またはQMAKE_EXTRA_COMPILERS、 でソースをビルドするためにを使用している場合test.proは、次のようなものを追加できます。

test.depends = $${ROOT}/runtime/lib*.bc
于 2012-08-31T22:57:23.007 に答える