問題タブ [gnu-make]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
makefile - 単一のアクション/ルールを使用して複数のターゲットを生成する
単一のアクションを使用して一連のファイルを生成するルールを作成するにはどうすればよいですか。
例: ファイルx
、y
、は、ファイルを入力として受け取るz
スクリプトを 1 回実行した結果として生成されます。t.sh
a
GNU make はt.sh
3 回実行を試みます。
qt4 - Qt4の本には「リリースする」と書かれていますが、現実は一致しません
さまざまな理由によると、Qt4アプリの場合、「makerelease」または「makedebug」を使用してリリースバージョンまたはデバッグバージョンをビルドします。実生活では、これらはエラーを引き起こします。
裸の「作る」だけが機能します。それが何を生み出すのかわかりません。「strip」を実行すると実行可能ファイルのサイズは小さくなりますが、gdbはストリップされていないファイルでシンボルを検出しません。ArchLinuxでqt4.6.2を使用しています。
では、リリースするかデバッグするかを決定する適切な方法は何ですか?
makefile - GNUMakeのファイル名ごとに異なる暗黙のルールを作成する方法
さまざまなC++ソースファイルを追加し続けるディレクトリと、それらをコンパイルするための汎用Makefileがあります。Makefileの内容は次のとおりです。
注:上記から明らかなように、実行可能ファイル拡張子には* .outを使用しています(オブジェクトファイルには使用していません)。
また、一緒にコンパイルされるいくつかのファイルがあります:
このようなファイルをコンパイルするために、これまでMakefileに明示的なルールを追加してきました。
しかし、今では私のMakefileに多くの明示的なルールがあり、それらをより単純な暗黙のルールに置き換えたいと思います。
それを行う方法はありますか?
makefile - GNU Makefile: 単一のルールからの複数の出力 + 中間ファイルの削除の防止
ここからの質問の続きです。問題は、1 つの入力から複数の出力を生成するルールがあり、コマンドに時間がかかるため、再計算を避けたいということです。ここで、ファイルが中間ファイルとして削除されないようにしたいという追加のひねりがあり、ルールにはパラメーターを許可するワイルドカードが含まれます。
提案された解決策は、次のルールを設定することでした。
次に、呼び出すと両方が作成され、 switchと並行しmake file-c.out
て実行する際の問題が回避されます。これまでのところすべて順調です。make
-j
問題は次のとおりです。上記のソリューションは DAG でチェーンをセットアップするため、別の方法でmake
考慮します。これらのファイルは中間ファイルとして扱われ、デフォルトでは、準備が整うと不要になるとすぐに削除されfile-a.out
ます。file-b.out
file-c.out
これを回避する方法は、ここのどこかで言及されており、ターゲットの依存関係としてfile-a.out
andを追加することで構成され、それらが削除されないようにします。残念ながら、私のルールではワイルドカード パターンが使用されているため、これで問題は解決しません。具体的には、私のルールは次のようになります。file-b.out
.SECONDARY
たとえば、実行することにより、ファイル名に含まれるパラメーターを渡すことができます
ドキュメントが提案する解決策make
は、これらを暗黙のルールとして の依存関係のリストに追加し、.PRECIOUS
これらのファイルが削除されないようにすることです。
このソリューションは.PRECIOUS
機能しますが、ルールが失敗してファイルが不完全な場合にこれらのファイルが削除されるのを防ぎます。これを機能させる他の方法はありますか?
これを解決するためのハックは、.SECONDARY
前提条件なしでターゲットを定義することです。つまり、
これは、中断されるかルールが失敗しmake
ない限り、すべてのファイルをセカンダリとして扱う必要があるため、削除しないことを通知します。make
残念ながら、ワイルドカードを使用してルールのサブセットを選択してこのように動作させることはできません。そのため、これはハックにすぎないと考えています (便利ではありますが)。
bash - Makefile と rm -f file.{ext1,ext2,ext3} の問題
Makefileルールの理由を説明していただけますか:
ファイルを削除することにはなりません: foo.bar1 foo.bar2 および foo.bar3? さまざまな Makefile でそのようなパターンを何度も見たと思いますが、現在独自の Makefile を作成していて、そのルールを正しく機能させることができません (ファイルは削除されません)。
私は使用しています:
- ヌーメイク3.81
- gnu バッシュ 4.1.5
私が推測するように、Bashはそのパターンを評価します:
ありがとう!
アップデート
David のヒントのおかげで、上記の問題の解決策が見つかりました。gnu make はデフォルトで /bin/sh を使用するため、a.{1,2,3} は a.1 a.2 a.3 に評価されません。
「make」で sh の代わりに bash を使用するには、次の行を Makefile に追加します。
これから a.{1,2,3} は a.1 a.2 a.3 と見なされます
debugging - 2 つのディレクトリ間の GNUMake の違いをキャプチャするにはどうすればよいですか
親ディレクトリからビルドすると、何かが異なり、make は必要なすべての .o(s) をビルドせずに失敗しますが、ディレクトリに cd して make を実行するとビルドされますそれらは大丈夫です。
これら2つの実行の違いをGNUmakeに教えてもらうにはどうすればよいですか? 子を壊すいくつかの make 変数が親に設定されている必要がありますが、それらを追跡する方法を理解するのに助けが必要です。
recursion - シェルを呼び出して新しい環境を作成し、別の make 内で make を実行するにはどうすればよいですか?
GNUmakefile に、新しいシェルを呼び出し、新しいシェルのクリーンな状態で新しい make を呼び出すターゲット ルールを設定したいと考えています。
これを行う構文は何ですか?
私はこれを試しましたが、うまくいきませんでした:
次のエラーが無限に繰り返されます。
makefile - 現在のディレクトリをmake変数の絶対パス名としてキャプチャするにはどうすればよいですか?
GNUmakeファイルの実行中に現在のディレクトリをmake変数に入れたいのですが。
これを行うための構文は何ですか?このようなもの?
makefile - 定義に変数を含む GNU make のゴール/ターゲットを一覧表示する
変数から名前を計算することにより、その場で多数のターゲットを作成するかなり大きなメイクファイルがあります。(例: foo$(VAR) : $(PREREQS))。これらの変数を展開した後、gnu make がターゲットのリストを吐き出すように説得できる方法はありますか?
任意のメイクファイルのターゲットを取得できるようにしたいと考えています。シェルの補完関数を作成しようとしています。
makefile - Makefile ジェネリック パターン ルール -- xyzzy.ext0 からの xyzzy-en_US.ext2
make を使用して、次の種類のプロダクションのジェネリック パターン ルールを定義する方法がわかりません。
経由で必要xyzzy-en_US.ext2
です。xyzzy.ext0
xyzzy.ext1
これは機能します:
しかし、2 番目のルールのロケール部分を一般化するにはどうすればよいでしょうか。それとも、すべての異なるロケールに対してルールを生成する必要がありますか?
これらのどちらも機能しません: