GNU Makeで前提条件を外部にリストする方法は?

GNU Makeで前提条件を外部にリストする方法は?

GNU Make makefileでターゲットの前提条件を照会する方法は?

たとえば、ターゲットが次のように指定されている場合:

fred: wilma barney betty

次の前提条件を印刷したいと思いますfred

$ make some_action fred
wilma barney betty

答え1

たぶん試験運営をお探しですか?

make --dry-run fred

マニュアルページでは、試運転に関する情報を提供します。

-n, --just-print, --dry-run, --recon
  Print the commands that would be  executed,  but  do  not 
  execute them.

したがって、直接リストではなく間接リストが提供されます。なぜなら彼が依存するタスクを実行したいからです。

答え2

もう1つの可能性は「データベース印刷」オプションですが、必要なものよりも多くの情報を提供します。マニュアルから:

   ‘-p’
   ‘--print-data-base’
      Print the data base (rules and variable values) that results from reading the
      makefiles; then execute as usual or as otherwise specified. This also prints the
      version information given by the ‘-v’ switch (see below). To print the data base
      without trying to remake any files, use ‘make -qp’. To print the data base of
      predefined rules and variables, use ‘make -p -f /dev/null’. The data base output
      contains file name and line number information for recipe and variable
      definitions, so it can be a useful debugging tool in complex environments.

しかし、公正な警告です。この混乱を注意深く見てください。〜する後処理なしで残酷になります。

答え3

Makefileが次のようになるとします。

.PHONY: wilma barney betty fred: wilma barney betty

最新バージョン作り直す--profile確認された依存関係グラフに変換できるデータを出力するオプションがあります。データファイルの出力形式は callgrind が使用する形式なので、出力データからチャートを生成するには別のプログラムが必要です。バラよりhttps://github.com/rocky/remake/tree/master/profile

以前のバージョンのリメイクでは、次のように依存関係を取得できます。

$リメイク-X -fメイクファイル
GNU Make 4.1+dbg0.91
x86_64-unknown-linux-gnu用に特別に作成
著作権(C)1988-2014フリーソフトウェア財団、Inc.
著作権(C)2015ロッキーバーンスタイン。
ライセンス GPLv3+: GNU GPL バージョン 3 以降
これはフリーソフトウェアなので、自由に変更して再配布できます。
法律が許す限り、いかなる保証も提供されません。
メイクファイルを読む...
メイクファイルの更新....
アップデート対象...
 「fred」ファイルが存在しません。
   "wilma"ファイルが存在しません。
  「Wilma」目標を再度実行する必要があります。
  ターゲットファイル"wilma"を正常にコピーしました。
<- (/tmp/??:0)
ウィルマ
リメイク<0>ターゲットフレッド依存性

フレッド: ウィルマ・バニー・ビーティ
リメイク<1>辞める
リメイク:そうですね…

実行したコマンドをファイルに入れると、次のようになりますcmds.txt

target fred depend quit

その後、次を実行できます。

cat cmds.txt | remake -X -f Makefile

依存関係名を使用して上記の内容を実行するプログラムの作成など、より複雑なタスクを実行する方法についての練習として残します。

関連情報