問題タブ [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 - GNUMake を学ぶためのリソース?
私が取り組んでいる小さなプロジェクトのためにGNUMakeを学ぼうとしています。これまでのところ、「基本的な」チュートリアルでさえかなり大雑把に見え、makefile の構文をまだ理解していません。
まったくの初心者が GNUMake に慣れるための優れたリソースを持っている人はいますか?
dependencies - 不足しているファイルを処理できるメイクファイルの依存関係ルールが必要
システムにはGNU Makeを使用しています。makefile の最後に、gcc の -MM スイッチを使用して一連の .d ファイルを生成する Makedepends というインクルードがあります。次に、include $(CXXFILES:.cc=.d) 行を使用して、各 .cc ファイルの .d ファイルを含めます。しかし、ファイルを削除したりファイルを移動したりすると、依存関係のステップが中断され、.d ファイルを手動で削除する必要があります (依存関係が失敗するため、make clean でさえ機能しません)。
これらの依存関係 .d ファイルを生成する方法、またはファイルの削除または再配置を適切に処理するこれらの依存関係 .d ファイルを含める方法はありますか?
編集: 例: serial.cc があり、メイクファイルは buffer.h に依存する serial.d ファイルを生成しますが、それを変更して、buffer.h が不要になり、buffer.h を削除します。次にmakeを実行すると、serial.oをbuffer.hに依存させる.dファイルが含まれているため、チョークします。
file - メイクファイルにファイルが存在するかどうかを確認する方法
単一の DLL (プラグイン システム用) をコンパイルするためのメイクファイル テンプレートがあります。ユーザーのメイクファイルは次のようになります。
私が持ってmakefile.in
いる:
plugin.os
コンパイルするメインの C++ ファイルはどこにありますか。ところで、末尾のファイルは.os
、共有ライブラリ用にコンパイルされたオブジェクト ファイルです (つまり、 with の-fpic
オプションを使用gcc
) 。
ここでの問題は、余分なソースがおそらく (必ずしもそうとは限りませんが) ヘッダー ファイルになることです。plugin.os
理想的には、それらをターゲットとの依存関係として追加したいと思いますがfile.cpp
、それらが存在する場合に限ります。
この方法は、Windows と Linux の両方で機能するか、少なくともそれぞれに適応できる必要があります。ただし、GNU バージョンの make しか使用していません。
makefile - (M|m)akefile セマンティクスとは何ですか?
Makefile と Makefile の使用に違いはありますか?
bash - 共有するための Makefile の興味深い使用法はありますか?
「make」は、プログラミング プロジェクトの構築に役立つだけでなく、他の分野ではあまり使用されていないようです。
たとえば、多くのシェル スクリプトを Makefile として書き直して、独立した部分を (「make -jXX」を使用して) 並行して実行できるようにして、すべての CPU コアをビジー状態に保つことができます。シェル スクリプトで副作用のあるいくつかのタスクの順序を変更することを検討してください。
make / Makefile の珍しい使用法に関する興味深い話はありますか? 安価なジョブ スケジューラとして他のユーティリティを使用していますか?
makefile - GNU Makefile の変数割り当て =、?=、:=、+= の違いは何ですか?
変数の割り当てが Makefile で実際にどのように機能するかを明確に説明できる人はいますか。
違いは何ですか :
GNU Make のマニュアルのセクションを読みましたが、それでも意味がわかりません。
makefile - GNU Make における CPPFLAGS と CXXFLAGS の違い
GNU MakeのCPPFLAGSとCXXFLAGSの違いは何ですか?
bash - Makefile の関数
私は多くの繰り返しのものを含む Makefile を書いています。
ここで、ターゲット 'syst' が定義され、変数 'UNAME' が定義され (通常は Linux ですが、Cygwin または OSF1 による場合もあります)、変数 'difort' および 'err_arch' も定義されます。このコード ブロックは、さまざまなコンパイラ ターゲットに対して何度も使用されます (「')。これは膨大な冗長コードなので、もっと簡単に書けるようになりたいです。たとえば、次のようなことをしたいと思います。
compile は、引数に基づいて上記のコードを実行する関数である可能性があります。どうすればこれを達成できるか誰にもわかりませんか?
bash - Makefile 内の汎用ターゲットを使用した make の Bash 補完
ほとんどのターゲットが既定のシーケンスによって一般的に作成される Makefile があります。bash の補完は、通常のターゲットの補完のみを示唆しているようです。
一般的なターゲットではありません。上記の例のように明示的に作成されていなくても、bash の完了をすべてのターゲットで完了する方法はありますか? より具体的に言うと、ターゲット名のリストを定義し、次のようにするとします。
これらのターゲットを bash の完了に使用できるようにする方法はありますか? または、さらに高度な例として、2 つのリストがあり、2 つのリストの要素のすべての可能な組み合わせでターゲットを作成したいとします。これらのターゲットを bash の完了にも使用できますか?
makefile - 個別のデバッグ ビルド ディレクトリとリリース ビルド ディレクトリのターゲットを作成する方法は?
gnumake マニュアルに記載されているように $(SUBDIRS) ターゲットを使用して make ターゲットを (ソース コード) サブディレクトリに適用する再帰的な makefile システムで、個別のデバッグおよびリリース ビルド サブディレクトリを適切に処理するための提案を探しています。
具体的には、「all」、「clean」、「realclean」などのターゲットを実装するための可能な戦略に興味があります.ツリーの1つを想定するか、両方のツリーで問題を引き起こしている必要があります。
私たちの現在のメイクファイルは、デバッグ (デフォルト) またはリリース ('リリース' ターゲット) に設定される COMPILETYPE 変数を使用します。これはビルドを適切に行いますが、クリーンアップとメイクはすべてデフォルトのデバッグ ツリーでのみ機能します。COMPILETYPE 変数を渡すのは面倒です。これを行うかどうか、およびどのように行うかは、実際のターゲットの値に依存するためです。