問題タブ [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.
variables - Makefile ターゲット内の変数に条件付きで追加する
次のようなGNU Makefileがあります。
つまり、make targetA または make targetB のいずれかを実行します。どちらも非常に似たようなことをしますが、アイテムのリストが異なります。問題は、変数が条件付きで追加されず、常に追加されることです。つまり、出力は常に「item1 itemA itemB」になります。
変数に条件付きで追加するにはどうすればよいですか?
gcc - 1 つの依存関係のコンパイルが失敗した場合、make を強制終了するにはどうすればよいですか?
メイクファイルの関連部分を投稿しました。このメイクファイルを実行するmake all
と、コンパイル時にコンパイル エラーが発生しdebugosd.o
ます。ただし、make は以前にビルドされた を検出したためdebugosd.o
、そのままビルドを続行しdialup.otz
ます。
すべての.oを削除せずに、強制debugosd.o
的に古いものにするにはどうすればよいですか?make
debugosd.o
.o ファイルを作成するルールは次のとおりです。
Makefile のスニペットは次のとおりです。
実際、私は問題が何であるかを理解しました。shared1.flw
偽のターゲットを使用して再構築を強制していました。make
これは、エラーに関係なく継続することを余儀なくされていたと思います。
makefile - Makefile で環境変数を「設定解除」することは可能ですか?
私はGNU makeを使用しており、CFLAGS
呼び出されたときに環境で定義されていると暴走するビルドシステムを持つプロジェクトにサードパーティのライブラリを含めています。CFLAGS
他の理由から、自分の環境で定義したいと思っています。ライブラリのビルドは別のメイクファイルから呼び出されているため、次のように言います。
サードパーティ:
$(MAKE) -f Makefile.3rdparty
CFLAGS
しかし、サードパーティの Makefile で make を呼び出すときに、それが設定されていないことを確認したいと思います。私が見つけることができる最も近いことは言うことです:
CFLAGS:=
ただし、これはまだCFLAGS
環境に設定されたままです。これは単なる空の文字列です。次のように言うような恐ろしいことをすることは別として:
サードパーティ:
bash -c "unset CFLAGS; $(MAKE) -f Makefile.3rdparty"
CFLAGS
サードパーティのライブラリが呼び出されたときに変数が環境にまったく存在しないように、プライマリ makefile 内から変数を「設定解除」する簡単な方法はありますか?
makefile - GNUに障害を明示的にテストさせるにはどうすればよいですか?
何年もmakeを使用していなかった後、私は再びそれを必要としていることに気付きました。今はgnuバージョンです。自分のやりたいことができるはずなのに、どうしたらいいのかわからなかったり、グーグルなどで答えを見つけたりしていません。
プログラムを何度も実行し、結果をログファイルに保存するテストターゲットを作成しようとしています。一部のテストでは、プログラムが中止されるはずです。残念ながら、私のmakefileは最初のテストで中止され、エラーが発生します。私は次のようなものを持っています:
上記の場合、makeはbad_input1の実行後に終了し、bad_input2の実行には到達しません。
c++ - make/gmakeとの条件付き依存関係
make / gmakeに条件付き依存関係に基づいて動作するように指示する方法はありますか?
私はこのルールを設定しています:
一般的なケースでは、すべての.cppファイルに対応する.hファイルがあります。ただし、いくつかの例外があります。gmakeで「これに依存する」を実現する方法はありますか?それができない場合、このタイプのセットアップのベストプラクティスはありますか?
前もって感謝します; 乾杯!
更新: GCCを使用しています
makefile - 別の Makefile から Makefile を呼び出す方法は?
あるメイクファイルを別のメイクファイルから呼び出すと、予期しない結果が得られます。1 つは と呼ばれ、もう 1 つは/path/to/project/makefile
と呼ばれ/path/to/project/gtest-1.4.0/make/Makefile
ます。私は前者に後者を呼び出させようとしています。/path/to/project/makefile には、
そして、/path/to/project/gtest-1.4.0/make/Makefile
私は持っています
以下を発行します。
出力:
ただし、これらのコマンドを発行すると:
そうですか:
わかりません:どちらの場合も、/path/to/project/makefile
現在の作業ディレクトリに入っていると言っています。最初のケースでは、実行する作業があるとは考えていません (実行している場合)。2 番目のケースでは、適切なディレクティブを見つけることができます (出力が間違ったディレクトリを探していることを示している場合)。の代わりに でrm
コマンドを実行します。/path/to/project
/path/to/makefile/gtest-1.4.0/make/
メイクファイルを相互に呼び出すための基本的な何かが欠けていますか? 重大な概念上の誤りを犯したか、それともよくある落とし穴に陥ったか? ディレクトリを効果的に変更し、最初のメイクファイル内から 2 番目のメイクファイルを呼び出すにはどうすればよいですか? 私の理解では、電話make -f <name>
するだけで十分だということでした。
これは bash の make/gmake 3.81 です。
dependencies - makeで(gccから)自動生成された依存関係を修正する
私は次のmakefile(フラグメント)を持っています
実行するmake dev
と、次のように表示されます
src/socket.h
(他のすべてが依存するファイル)を変更して実行make
すると、プロジェクト全体が再構築されると期待していましたが、1つのアクションしか出力しません
自動依存関係を正しく生成していると思います。そのため、単にそれらを適切に使用していないように感じます。どこが間違っているのですか?makefile:59:...
エラーが手がかりであることは知っていますが、自動生成された依存関係をこれまで使用したことはありません。
前もって感謝します; 乾杯!
makefile - 何もする必要がないときにmakeをシャットダウンするにはどうすればよいですか?
メイクが言うのをやめるにはどうすればいいですmake: Nothing to be done for 'all'.
かmake: 'file' is up to date
?何もしていないときはビルドをサイレントにしたいのですが、echo
ビルドの進行状況を追跡するために呼び出される場所は他にもあるので、このメッセージは混乱しているだけです。私は現在、このようにそれを沈黙させています:
もっと良い方法があるはずだと何かが教えてくれます。何か案は?
編集:
ただし、何かを構築する必要がある場合は、コマンドエコーを機能させ続けたいと思います。私が望んでいることの良い例は、の線に沿ったものですが--no-print-directory
、選択したメッセージをシャットダウンするための他のフラグが見つかりません。
makefile - オブジェクト .o ファイルのみをコンパイルするように Makefile.am スクリプトで指定するにはどうすればよいですか?
Makefile.am
最終的なアプリケーション バイナリの構築を担当する があります。
ctrnn
また、src ディレクトリには、追加の を含むと呼ばれるサブディレクトリがありMakefile.am
ます。
ここで、トップレベルがサブディレクトリで生成されたオブジェクト ファイルを使用してバイナリをビルドする必要があるという考えで、ctrnn/Makefile.am
オブジェクト ファイルのみを生成する必要があります。.o
Makefile.am
ctrnn
これは次のctrnn/Makefile.am
とおりです。
このMakefile.am
ファイルに基づいて、network.o と neuron.o を完成させたいと思います。私はMakefile
Automakeなどを使用してそれに応じて生成していますが、makeファイルを実行しようとすると、何もせず、次のように表示されます:
理由はわかっています。ビルド ターゲットを指定する必要があります。しかしctrnn/Makefile.am
、bin_PROGRAMS
実際のオブジェクト ファイルnetwork.o
とneuron.o
.
(bin_PROGRAMS 名を指定すると、main への未定義の参照が正しく表示されることに注意してください)。
私は何を間違っていますか?
makefile - gnu make、microsoft nmake、および posix 標準 make はどのように似ていますか?
gnu make、microsoft nmake、および posix 標準 make はどのように似ていますか?
明らかに「どのOS?」「どのコンパイラー?」といったものがあります。と「どのリンカ?」ですが、メイクファイル自体の構文、セマンティクス、およびコマンド ライン オプションについて具体的に言及しています。
gnu make のマニュアルに基づいて makefile を作成する場合、注意する必要がある最も重要な移植性の問題は何ですか?