2016-05-09 4 views
2

私はDockerコンテナの内部で実行する必要がある複雑なレガシーMakefileを持っています。基本的に、私は "ドッカーの実行..."を前に追加する必要がある以外は、自分自身を再度呼び出すMakefileが必要です。メイクファイルは、前に付いた文字列を除いて同じコマンドライン入力で呼び出す

エンドユーザーは複数のターゲットを作成することがあり、複数のコマンドライン変数とオプションも指定できるので、各ターゲットを呼び出すだけでなく、コマンドライン呼び出し全体を複製する必要があります。

<BLACK_MAGIC>: 
    docker run my_image make <COMPLETE_ORIGINAL_MAKE_COMMAND_LINE> 

提案:

は、私は、フォームの何かを期待していますか?

ありがとうございます!

答えて

1

何か他のものにメイクファイルの名前を変更し、それらが本体にコピーする必要があるので、スタブ

FLAGS := $(if $(MAKEFLAGS),-$(MAKEFLAGS)) 
.SUFFIXES: 
.PHONY: all 
%:: all ; 
all: 
    docker run my_image $(MAKE) -f Makefile.old $(FLAGS) $(MAKEOVERRIDES) $(MAKECMDGOALS) 
  • メイクが
  • .SUFFIXES:がクリアレシピでMAKEFLAGSから特定のフラグを削除して、次を使用します接尾辞リスト
  • という名前のファイルがある場合にだけall.PHONYターゲットにする場合
  • 10は、他のターゲットを複数回行い呼び出す避けるために%::allに依存してください
  • レシピは、彼らが MAKEOVERRIDESで別々に追加する必要が呼び出されるまで、コマンドライン変数が MAKEFLAGSに置かれることはありませんので
  • 、我々はできます」最初の点のために直接MAKEFLAGSを使用してください。
+0

そしてMAKEFLAGS(これはGNUは私が思うの拡張を行う場合)、変数に関するいくつかのドキュメント:https://www.gnu.org/software/make/manual/html_node/Options_002fRecursion.html –

+0

@StianSkjelstad 'MAKEFLAGS' POSIX標準の一部であり、古いmakeは 'MFLAGS'を使うかもしれません。 – user657267

関連する問題