問題タブ [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.
shell - makefileシェルの結果がシェルで同じことを行うのと異なるのはなぜですか?
GNUmakefileの内容は次のとおりです。
次の結果が得られます:
ただし、シェルで次のように入力すると、次のようになります。
結果が得られます:
明らかに、私のシェル構文は私が思っていることを実行していませんが、その理由はわかりません。
ありがとう。
gnu-make - GNU make によって実行されるコマンドを確認するにはどうすればよいですか?
複雑な Makefile をデバッグしようとしています。GNU make が実行するすべてのコマンドを出力するにはどうすればよいですか? ページで答えを見つけることができませんでしたman
(-d フラグを使用しても表示されないようです)。
(これは私の質問に答えるのに必要な情報ではありませんが、疑問がある場合に備えて: NVIDIA の CUDA ライブラリでビルドされたプロジェクトをコンパイルするのに問題があります。自分でコンパイルすることはできますが、その Makefile を使用すると厄介なコンパイラ エラーが発生します。提供された Makefile を使用して、パッケージ化を容易にし、既にリンクされている他のパッケージを含めたいと思います。)
makefile - ルール実行時にmake変数を定義する
GNUmakefile で、一時ディレクトリを使用するルールを作成したいと考えています。例えば:
書かれているように、上記のルールは、ルールが解析されるときに一時ディレクトリを作成します。これは、常に out.tar を作成していなくても、多くの一時ディレクトリが作成されることを意味します。/tmp に未使用の一時ディレクトリが散らばるのを避けたいと思います。
変数が定義されるたびにではなく、ルールが起動されたときにのみ変数が定義されるようにする方法はありますか?
私の主な考えは、mktemp と tar をシェル スクリプトにダンプすることですが、それはやや見苦しく思えます。
c - makefileのデバッグ
以下のようなステートメントを持つmakefileがあります。
ビルドを実行すると、次のようなメッセージが表示されます。
では、発行されたforeachコマンドに問題があるように見えますか?私はこれらのmakefileを初めて使用するので、makefileをデバッグする方法を誰かに提案してもらえますか?
makefile - makeでvpathマッチング後に絶対パスを取得するにはどうすればよいですか?
いくつかのプロパティに応じてvpathを設定し、ソースファイルのリストを1つの変数に生成するmakefileがあります。何もコンパイルせずにmakefileを実行する必要があり(コンパイルは実際には別のmakefileによって処理されます)、vpath設定に応じてファイル名が一致する実際のファイルを確認するだけです。
unix - Makefile でファイル名のコロンをエスケープする
コロンを含むファイル名で GNU make を正しく動作させる方法はありますか?
私が直面している特定の問題には、たまたまパターン ルールが関係しています。タブ文字の切り取りと貼り付けに依存しない単純化されたバージョンを次に示します。
$(COLON) をリテラル : に置き換えると、まったく同じ結果が得られます。バックスラッシュがないと、次のようになります。
makefile - gnumake と前提条件による並列ビルド
私の最初の質問 (イェイ!) は、gnumake と並列ビルドについてです。簡単なサンプル ファイルを次に示します。
私がこの男に行う場合、コマンドが1回だけ実行され、いずれかを構築しようとする前に、make -j
ここで正しいことはありますか?tool_1
make
tool_[234]
私が探しているのは、最初にビルドされ、次に並行してビルドされるmake -j
原因があることですが、コマンドを3 回実行する必要はありません。それが理にかなっていることを願っています。提案やアイデアをありがとう!tool_1
tool_[234]
tool_1
c - コマンドラインを介してGNUmake変数に追加
私はGNU-makeMakefileを使用して、いくつかのターゲット(、、およびいくつかのプロジェクト固有のターゲット)を持つCプロジェクトを構築していall
ますclean
。デバッグの過程で、Makefileを永続的に編集せずに、単一のビルドにいくつかのフラグを追加したいと思います(たとえば、デバッグシンボルを追加したり、プリプロセッサフラグを設定したりします)。
過去に、私は次のようにそれを行いました(デバッグシンボルの例を使用):
残念ながら、これはCFLAGS
変数に追加するのではなく、変数をクリアしてコンパイルを停止します。との末尾に追加されたある種のダミー変数を定義せずにこれを行うクリーンな方法はCFLAGS
ありLDFLAGS
ますか?
c++ - Makefile は %.c で動作しますが、%.cpp では動作しません
「大きな」C プロジェクトをビルドするために使用するメイクファイルのセットがあります。現在、C++ プロジェクトでいくつかを再利用しようとしていますが、理解できないこの頭痛に遭遇しました。
メイクファイルはこんな感じ
少し複雑ですが、C で行うことは、SOURCES で定義されたすべての %.c ファイルをビルドし、オブジェクト ファイルを BUILD_DIR に配置することです。c ではうまく機能しますが、cpp ファイルでは機能しません。私は得る
VPATH がまったく機能していないようです。私は試した
しかし、それもうまくいきません。
驚くべきことに、blue.cpp の名前を blue.c に変更し、makefile を編集して %.c の使用法に戻しても問題なくコンパイルされます。
私はここで夢中になっていますか?