2017-11-07 6 views
0

構造:Makefileのツリーは複数のターゲットをビルドします

makefile 
system/ 
-> makefile 
-> kernel/ 
-> -> makefile 
-> -> src/ 
-> FutureModules 
-> -> makefile 
-> -> src/ 
userland/ 
-> makefile 
-> FutureModules 
-> -> makefile 
-> -> src/ 

は現在、私はmake systemでそれを構築しています。私は複数のターゲット(例えばmake debug system userlandまたはそのようなもの)でmake debug systemまたはmake -d systemような何かを行うことができるように、私はデバッグ/テスト/リリースにそれを分割したい

  1. を構築します。
  2. systemをビルドする代わりにターゲットを直接ビルドすることができ、手動でsystem/makefileに目的のターゲットを追加する必要があるので、ターゲットを変更したいと思います。今

は、この達成するために:

  1. は定数を行いメイクファイル間で共有されますか?だから、私がmake systemを実行してルートメークファイルにCFLAGS += -g -Ogを定義した場合、system/makefileはルートメイクファイルから定数を取得しますか?
  2. 定数はmakeセッションで同じままですか?だから私がmake debug system userlandをしてdebug: CFLAGS += -g -Ogのようなものを持っている場合、システムとuserlandは-g -Ogフラグを得ますか?

編集:私は$(shell find -maxdepth 1 -type d)や他のいくつかのコマンドを使用して2を達成するために管理。

ようにxxxBUILDとが対応するxxxFLAGSに追加されます
#Build mode. m=d => Debug | m=t => Test | m=r => release | default => release 
ifeq ($(m), d) 
    NASBUILD = $(NASDEBUG) 
    GASBUILD = $(GASDEBUG) 
    CPPBUILD = $(CPPDEBUG) 
    CBUILD = $(CDEBUG) 
else ifeq ($(m), t) 
    NASBUILD = $(NASTEST) 
    GASBUILD = $(GASTEST) 
    CPPBUILD = $(CPPTEST) 
    CBUILD = $(CTEST) 
else ifeq ($(m), r) 
    NASBUILD = $(NASRELEASE) 
    GASBUILD = $(GASRELEASE) 
    CPPBUILD = $(CPPRELEASE) 
    CBUILD = $(CRELEASE) 
else 
    NASBUILD = $(NASRELEASE) 
    GASBUILD = $(GASRELEASE) 
    CPPBUILD = $(CPPRELEASE) 
    CBUILD = $(CRELEASE) 
endif 

export NASBUILD 
export GASBUILD 
export CPPBUILD 
export CBUILD 

答えて

0

はでそれを解決しました。

+0

なぜ、すべてのブランチに 'export'行を置いていますか?これは解決策ですが、より洗練された解決策が可能です。 – Beta

+0

私は割り当てられた後に変数をエクスポートしなければならないと思ったので。 – DevNoteHQ

関連する問題