問題タブ [makefile]
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.
dependencies - 1つのMakefileで異なるバージョンのコンポーネントを効率的に構築するにはどうすればよいですか?
私は自分自身を隅に追いやっていないといいのですが。Makefileの実装のほとんどの方法を理解しましたが、最後のビットを機能させることができません。ここの誰かが私がやろうとしていることをするためのテクニックを提案してくれることを願っています。
ソースリポジトリのバージョン管理されたファイルに「部品表」と呼ばれるものがあり、次のようなものを作成します。
Makefileで$(VER)をタグとして使用して、リポジトリからBOMを取得し、Makefileに含める依存関係ファイルを生成し、その依存関係を含めて再スキャンしてから、製品をビルドします。
より一般的には、私のMakefileにはいくつかのターゲット(A、B、Cなど)があり、それぞれの異なるバージョンを作成できるので、次のようにします。
依存関係ファイルには、3つのターゲットすべてに関する情報が含まれています。
ただし、依存関係ファイルの作成には多少の費用がかかるため、次のようにします。
Makefileに依存関係を再生成しないようにしたいと思います。そして、物事をできるだけ複雑にするために、私は次のことを行うかもしれません:
したがって、2番目のビルドへの依存関係を再生成する必要があります。
チェックアウトにより、依存関係の再生成に使用されるタイムスタンプが台無しになるため、依存関係ファイルがBOMではなく、BOMが変更されたことを示すものに依存する方法が必要だと思います。
私がやってきたのは、BOMチェックアウトを.PHONYターゲットで発生させ(常にチェックアウトされるようにするため)、最後のチェックアウトの内容を「.sig」ファイルで追跡することです(署名ファイルがない場合、または内容は新しいファイルの署名とは異なり、BOMが変更されます)、依存関係の生成は署名に依存します)。Makefileの上部に、いくつかの設定があります。
そして、私は常にする必要があるようです:
しかし、上記のように、私がそれを実行し、続行する場合:
その後、makeを呼び出すたびに依存関係が更新されます。だから私は試してみます:
と
ただし、署名が変更されても、依存関係の生成は作動しません。$(SIGS)がターゲットではないため、$(BOMS)ルールが署名を更新するときにmakeが気付かないためだと思います。
.sig:.bomルールを作成し、チェックアウトされたBOMのタイムスタンプをタッチで管理しようとしましたが、機能しませんでした。
誰かが次のようなことを提案しました:
しかし、SIGがBOMから作成される場合、BOMはどのようにSIGに依存することができますか?「BOMからSIGを作成し、SIGがBOMよりも新しい場合は、BOMをチェックアウトする」と書かれていることを読みました。そのプロセスをブートストラップするにはどうすればよいですか?最初のBOMはどこから来たのですか?
makefile - makefiles CFLAGS
TinyOSを学ぶ過程で、私はmakefileについてまったく無知であることに気づきました。
プリプロセッサ変数を宣言することで使用できる、オプションのコンパイル時機能が多数あります。
それらを使用するには、次のようなことを行う必要があります。
CFLAGS="-DPACKET_LINK"
これにより、特定の機能が有効になります。
と
CFLAGS="-DPACKET_LINK" "-DLOW_POWER"
2つの機能を有効にします。
誰かが私のためにこれらの行を分析して、何が起こっているのか教えてもらえますか?TinyOSの観点からではなく、makefileの観点から!
linux - Imake が Imakefile 内の特定の単語を数値に解釈するのはなぜですか?
これに関する既存のドキュメントを見つけるのは非常に難しいことがわかりました。私が見つけようとしているのは、なぜ Imake が生成された Make ファイルでunix
、linux
または数字の 1 などの単語を解釈するのかということです。i386
あなたがそのシステムにいるかどうかを示す機能だと思います。これがどこかに設定された #define であることを見つけることができなかったので、これは組み込まれているものですか?
c++ - Nant で独自のコンパイラを使用するにはどうすればよいですか?
Nant は非常にコンパイラ中心のようです。これは、.NET 開発システムと見なされているためだと推測されます。しかし、私はそれができることを知っています!見たことある。私たちが構築しているプラットフォームには独自のコンパイラがあり、c++ 用の「cl.exe」は使用しません。別のプラットフォームで C++ アプリを構築しており、独自のコンパイラでオーバーライドしたいと考えています。誰かがそれを行う方法、または少なくともターゲットプラットフォームのコンパイラを使用する独自のターゲットを設定する方法を教えてもらえますか?
windows - エラーが発生した場合に Windows コンソールで GNU Make を一時停止する
私が担当しているアプリのインストールの一部で、いくつかの C コード ライブラリをコンパイルします。これは、GNU Make を使用してコンソールで実行されます。
そのため、インストールの一部として、コンソール ウィンドウが開きます。コンパイルとリンクが完了すると、make ファイルの出力が表示されます。終了すると、コンソール ウィンドウが閉じ、インストーラーが続行されます。
コンパイル エラーがない限り、問題ありません。次に、make ファイルがバグを起こし、何が起こっているのかを理解する前にコンソール ウィンドウが閉じます。
したがって、メイクファイルからエラーが発生した場合、コンソールが開いたままになるように、「キーを押して続行する」タイプの機能でコンソールウィンドウを一時停止させたいと考えています。それ以外の場合は、通常どおり終了してコンソールを閉じます。
GNU Makefile で、または Make を実行できるバッチ ファイルからこれを行う方法がわかりません。
makefile - crti.o ファイルがありません
私は GNU ツール チェーンを使用してプロジェクトを構築していますが、リンクするまではすべて正常に動作し、リンカはそれが見つからない/見つからないと文句を言いますcrti.o
。これは私のオブジェクト ファイルの 1 つではなく、libc に関連しているようですが、なぜこれが必要なのか理解できませcrti.o
んlibc.a
。
アームプラットフォーム用にクロスコンパイルしています。ツールチェーンにファイルがありますが、リンカーにそれを含めるにはどうすればよいですか?
crti.o
「ライブラリ」検索パスの 1 つにあり.o
ますが、ライブラリ パスでファイルを検索する必要がありますか?
gcc
との検索パスは同じld
ですか?
objective-c - Xcode プロジェクトから Makefile を生成するにはどうすればよいですか?
Mac 上の既存の Xcode プロジェクトから Makefile を生成したいと考えています。具体的には、既存の iPhone、Mac 上の Objective-C プログラムです。
PBToMakeを見つけましたが、Xcode 2.1 用のようで、使用しようとすると、Xcode 3.1 プロジェクトでは機能しませんでした。
c++ - 別の出力ディレクトリの GCC 依存関係の生成
GCC を使用して依存関係ファイルを生成していますが、ビルド ルールによって出力がサブディレクトリに配置されます。GCC が生成する依存関係ファイルにサブディレクトリのプレフィックスを入れるように GCC に指示する方法はありますか?
makefile - mkdir を使用しているときにメイクファイルで「ディレクトリが既に存在するエラー」を防ぐ方法
メイクファイルでディレクトリを生成する必要があり、簡単に無視できるにもかかわらず、「ディレクトリが既に存在するというエラー」が何度も発生しないようにしたいと考えています。
私は主に mingw/msys を使用していますが、他のシェル/システムでも動作するものが欲しいです。
私はこれを試しましたが、うまくいきませんでした。何かアイデアはありますか?
windows - cygwin/msys bash でコマンドライン引数として「pkg-config」を使用する
Windows のビルド環境として cygwin を使用しようとしています。GTK+ などのサードパーティ パッケージに依存しています。
通常、Linux でビルドする場合、Makefile で gcc への引数として pkg-config への呼び出しを追加できるため、次のようになります。
これは Linux では問題なく動作しますが、cygwin では次のようになります。
今、私は手動で pkg-config を実行し、出力を Makefile に貼り付けているだけですが、これは本当にひどいことです。この問題を回避または修正する良い方法はありますか?
Makeは犯人ではありません。gcc を呼び出すために使用するコマンド ラインをコピーして貼り付けることができます。それ自体で gcc が実行され、「: 無効な引数」で停止します。
コマンド ライン引数を出力する小さなテスト プログラムを作成しました。
一重引用符に注意してください。
テスト プログラムの実行:
最後の行の一重引用符に注意してください。argc が本来よりも 1 大きく、argv[argc - 1] が null のようです。Linux で同じテストを実行しても、この結果は得られません。
そうは言っても、バックティック演算子を使用するのではなく、Makefile で pkg-config の結果を変数に格納し、その変数を使用する方法はありますか?