2011-07-16 4 views
4

私は自分のプロジェクトでサブディレクトリを作成しようとしています($PROJECT/childと呼んでください)、その親からというメークファイルをプルする必要があります。$PROJECT/Makefile.inc。後で$PROJECT/childを別の場所にコピーして、$PROJECTから独立して実行することができます。コンポーネントのMakefileを含める前に、どのようにコマンドを実行しますか?

両方のプロジェクトに含める必要があり、サブディレクトリがコピーされるときに出荷される共通のMakefileがあります。どちらの場合でもインクルードする必要があります。だから私はchildビルド時にそれをリンクすると思った。 (../Makefile.incを含めることは望ましくありません。これは、プロジェクトをコピーすると消えてしまい、Makefile.incを置くことを呼び出し元のビルドシステムに任せたくないからです。)

これらの制約を使用すると、

HACK = $(shell test -f Makefile.inc || ln -f ../Makefile.inc .) 
include $(HACK)Makefile.inc 

お知らせその2番目のコマンドに余分な特別なダクトテープ:ここで私は$PROJECT/child/Makefile以内に、これを行うために作ってみた恐ろしいハックです。私は実際に$(HACK)を含める必要がありますが、空になるので、$(shell ...)が評価されます。 ;-)

これを行うためのクリーンな方法はありますか?

答えて

5

Makefile.incを作成するルールを指定します。 (makeは、それがincludeラインを解析する際に存在していないMakefile.incと文句を言うだろうが、それは含まれたファイルで、メインのmakefileの構文解析に行くインクルードファイルを構築するために任意のルールを適用し、go back and re-parse the main makefileます。)

include Makefile.inc 
Makefile.inc: 
     ln ../Makefile.inc [email protected] 
+0

美しいです!ありがとう。私は、カジュアルな観察者に何が起きているのかを明確にするためのコメントを追加しました。 – mpontillo

関連する問題