問題タブ [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.
macos - 「GNUMakeが見つかりません。環境変数GNUMAKEを設定してみてください。」
この記事で説明されているように、Steel BankCommonLispをインストールしようとしています。
ただし、この手順を実行すると、次のようになります。
このエラーが発生します:
正確には、GNU Makeをインストールし、Mac OS Xで環境変数GNUMAKEを設定するにはどうすればよいですか?
makefile - gnu make:match-anything:前提条件の存在への依存
次のMakefileを検討してください。
(実行可能ファイルの)match-anythingルールにより、端末に次のように入力できるようになります。
make TS_CG
TS_CGという実行可能ファイルをコンパイルします。ただし、make
すべて一致するターゲットは使用しません。代わりに、デフォルトのコンパイルルールを使用します。
一方、UTILITIESにリストされているすべてのオブジェクトが存在する場合は、すべて一致するターゲットを使用します。したがって、マッチングは前提条件の存在に依存しているようです。
どうやら:
ルールがターミナルの場合、その前提条件が実際に存在しない限り、ルールは適用されません。
( マニュアル作成による)。しかし、私のルールは終末ではありません。二重コロンでマークされていません!
では、なぜこれがまだ当てはまるように見えるのでしょうか?
また、ファイルで実行しようとしたように、オブジェクトターゲットと実行可能ターゲットを区別するためのより良い解決策があるかどうかを尋ねる場合もあります。
makefile - gnu make: 2 つの文字列を連結する方法
次の行を指定します。
.o
に置き換えるのではなく、各ファイル名に追加し.cpp
たいと思います.o
。
それ、どうやったら出来るの?
makefile - Makefile でルールを定義して、すべての *.cpp ファイルではなく、変更された *.cpp ファイル (およびその依存関係) のみをコンパイルする方法
ファイルがあるとしましょう:
ライブラリ:
- one.cpp、one.h
- 2.cpp、2.h
- three.cpp、three.h
プログラム:
- プログラム.cpp
最後のコンパイルから変更された *.cpp のみをコンパイルする Makefile を作成する方法はありますか?
現在、私はそのようなものを持っています:
私は問題なく動作しますが、プログラムをコンパイルしてから two.cpp または two.h を変更すると、最初に「make clean」を実行する必要があります。
Makefile をそのように変更したいと思います。変更を認識し、そのファイルとその依存関係を再コンパイルします (one.cpp が変更された two.cpp のコードを使用する場合、両方のファイルを再コンパイルする必要があります)。
したがって、two.cpp を変更すると、make は次のようになります。
しかし、one.cpp が変更された two.cpp のコードを使用している場合は、次のようにする必要があります。
makefile - Makefile展開変数
他の変数への参照を含む可能性のある変数を展開したいと考えています。例を挙げて説明します:
このメイクファイルを実行すると、次のように出力されます。
次のように展開する方法を知りたいです。
私は次のことができます:
私が望むものに近づくには、変数を再度割り当てる必要があります。また、私がeval
望むものではないかもしれない変数全体にあったものは何でも ing しています。私は何かのようなことをし$(expand X)
て、結果のテキストを手に入れたいと思っています。
directory - Makefileでディレクトリをコピーするには?
Makefile 内images/
からコピーしたいディレクトリがあります。build/images/
ディレクトリには、複数レベルのサブディレクトリが含まれる場合があります。それを行う最もエレガントな方法は何ですか?私が欲しい:
- 実行ごとに完全なディレクトリ コピーを避ける
make
(つまり nocp -r
) - 一貫性の保証 (つまり、ファイルが で変更された場合、
images/
で自動的に更新される必要がありますbuild/images/
) - Makefile 内の各イメージと各サブディレクトリにルールを指定しないようにする
- 以内
make
に問題を解決するため、いいえrsync
またはcp -u
可能であれば
私は GNU make を使用しているため、GNU 固有のものは許可されています。
gnu-make - 迷惑なMakefileエラー(g ++:g ++およびシェルエラー)とMulti-Makefile設計アドバイスのヘルプが必要
私はmakefileを持っています:
ディレクトリ構造を作成してデータを設定した後、2番目のmakefileを呼び出します。
2番目のmakefileは次のとおりです。
私はMakefilesの初心者であることを認めます。これらのファイルを(あまり「魔法」を使わずに)合理化する方法と、これら2つのエラーを修正する方法の両方についてアドバイスをお願いします...
まず、いわばすべてが機能していると言わなければなりません。ターゲットをビルドすると、すべてのディレクトリが正しく作成され、実行可能ファイルが生成されます。また、ベースレベルのソースディレクトリにあるファイルに触れると、すべてのファイルが正しくコピーされ、再コンパイルされます。つまり、これらはいわば「実際の」エラーではなく、私が取り除きたい迷惑なエラーテキストです...
最初のエラーは、make molecule_test
何かを実行する必要があるビルドを実行したときに発生します。それがする必要があることは何でも行われますが、私も得ます:
..もう一度ビルドが成功し、実行可能ファイルが適切に作成されます
私が得る2番目のエラーは、何もすることがないときに発生します...それが発生すると、次のようになります。
優しくしてください...gnumakefileチュートリアルを含む基本的なmakefileチュートリアルを読みましたが、少数のローカルソースを使用する小さなプログラムと、ネストされたディレクトリ、データを必要とする大きなプログラムを作成することの間には飛躍があるようです。ファイルなど。私はその飛躍を遂げようとしています...残念ながら、私は企業の雰囲気ではなく、大学の小さな研究グループにいるので、過去のコードからのベストプラクティスのmakefileはありません。
私の基本的なアプローチは、次のベースディレクトリを作成することです。
トップレベルのmakefileは、ビルドディレクトリにサブディレクトリを作成し、必要なソース(たとえば、特定のテストプログラム、必要なデータファイル、およびすべてのソースを作成するためのmakefile)をコピーします。次に、トップレベルのmakefileはビルドレベルのmakefileを呼び出します。
このプロセスを合理化する方法についてのアイデアを歓迎しますが、最初にエラーを解決していただければ幸いです。
前もって感謝します!!!
PS私はCentos5.4、GNU Make 3.81、gccバージョン4.1.2 20080704(Red Hat 4.1.2-44)で実行しています....GNUMakeとgccは両方とも64ビットバージョンです...
gnu-make - GNU Make は前提条件を忘れていますか?
これは少し複雑なので、ここに例をアップロードしました。
テスト方法:
- tarball をダウンロードして展開します
- cd make_problem/make
- きれいにする(アーカイブからアーカイブを削除するのを忘れた;))
- make alib (削除したばかりの単純でばかげたアーカイブを再作成します)
- ./weird.sh
odd.sh が行うことは、単純に、ソース ファイルに触れて再作成し、別のソース ファイルに触れて再作成を数回繰り返すだけです。
GNU Make 3.81 を使用した Linux システムでの出力は次のようになります。
ソースにアクセスするたびにアーカイブが再構築されることを期待していましたが、明らかにそうではありませんでした。
誰でもこれを説明できますか?そして、それが常に期待どおりに機能することを確認する方法を説明してください?
makefile - makefileの呼び出し先を取得するには?
GNU make Makefile の呼び出しターゲットを取得するには?
たとえば、make
次のコマンド ラインで呼び出します。
Makefile で呼び出しターゲット「a-target」を取得し、それを変数に割り当てるにはどうすればよいですか?
さらに、コマンドラインで複数のターゲットが指定されている場合:
それらすべてを取得するにはどうすればよいですか?
c++ - Makefileで複数のディレクトリを作成するのに助けが必要
メイクファイルに次のコード ブロックがあります。
基本的に、ビルドディレクトリが存在しない場合にメイクファイルがクラッシュして死ぬことはないので、これは必要です。ディレクトリツリーの欠落部分を再作成したいのです。入れ子になっているのは、ビルド ディレクトリ、ビルド内のテスト ディレクトリ (モジュール テストと完全なプログラムの場合)、およびそのテスト ディレクトリ内にテスト用の個々のディレクトリがあり、それぞれにソース、obj、およびが必要なためです。ビンディレクトリ。そのため、作成するものがたくさんあります。
これが私の質問です。メイクファイルの「魔法」を利用して、次のような単一の変数を供給する方法はありますか?
その巨大な if ステートメントではなく、1 つまたは 2 つのライナーのように、必要なすべてのディレクトリを作成しますか?
前もって感謝します!!