問題タブ [build-system]
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.
build-system - ターゲット リスト ジェネレーターのビルド時に OMake でターゲットが不明なビルド ルールを処理する方法
ビルド システムに OMake を使用するプロジェクトがあり、かなり難しいコーナー ケースを処理しようとしています。
いくつかの定義ファイルと、これらの定義ファイルを取得して GraphViz ファイルを作成できるツールがあります。ただし、次の 2 つの問題があります。
- 各定義ファイルは複数のグラフを作成でき、作成できるグラフのリストはファイルにエンコードされています。私のダンプ ツールには
-list
、定義ファイルが生成するすべてのグラフを一覧表示するオプションがあります。 - このダンプ ツールは、ソース ツリーに組み込まれています。
- このリストを OMakefile で利用できるようにして、他のルールを使用して DOT ファイルを SVG に変換し、偽のターゲットをすべての SVG に依存させるようにします (目標: すべてのグラフの SVG 記述を構築する単一の構築コマンド)。
最初の問題だけがあれば、簡単です。ツールを実行してリストを作成し、そのリストを使用して、ダンパーを呼び出して GraphViz ファイルを出力するターゲットを作成します。ただし、必要になる前にダンプツールを強制的にビルドすることにかなりこだわっています。
もしそうなら、ダンプツールを構築するために再帰的にmake
実行するだけです。make
ただし、OMake では再帰呼び出しが許可されておらず、build
関数は からのみ使用できosh
ます。
この問題の良い解決策はありますか?
c++ - 再帰的な依存関係の集約によるシステムの構築
私は最近、クロス プラットフォーム ビルド システム (メイク ファイル、ビジュアル スタジオ ソリューション/プロジェクトなどをオンデマンドで生成する) を使用して独自のライブラリとプロジェクトのセットアップを開始しましたが、既に解決されている可能性が高い問題に遭遇しました。
私が遭遇した問題は次のとおりです。アプリケーションに依存関係もある依存関係がある場合、リンクされるアプリケーションは依存関係とそのすべてのサブ依存関係をリンクする必要があります。これは再帰的に進行します。
(議論のために、静的ライブラリのみを扱っていると仮定しましょう。)
- TopLevelApp.exe
- 依存関係_A
- 依存_A-1
- 依存_A-2
- 依存関係_B
- 依存関係_B-1
- 依存関係_B-2
- 依存関係_A
したがって、この例では、TopLevelApp は、dependency_A、dependency_A-1、dependency_A-2 などをリンクする必要があり、B についても同様です。ターゲット アプリケーションでこれらすべてを手動で記憶する責任は、最適ではないと思います。また、依存関係の同じバージョンがすべてのターゲットで使用されることを保証するという問題もあります (一部のターゲットが同じものに依存していると仮定すると、boost など)。
現在、すべてのライブラリをリンクする必要があり、それを回避する方法はありません。私が探しているのは、これを管理するビルド システムです。したがって、何かに依存することを指定するだけで、そのライブラリの適切な依存関係が自動的に取り込まれます。
私が調べているビルドシステムは、これを処理しない premake premake4です(私が判断できる限り)。これを処理するビルドシステムを知っている人はいますか? ない場合は、なぜですか?
static - 共有よりも静的ライブラリの使用を強制するにはどうすればよいですか?
私のSConscriptには、次の行があります。
他のライブラリと動的にリンクしながら、sconsにmylib.soの代わりにmylib.aを使用させるにはどうすればよいですか?
編集:プラットフォーム固有のハックをできるだけ少なくすることを検討しています。
c - ヘッダーのマクロ定義、それらをどこに置くか?
ヘッダーが依存するマクロ(特に、など)を定義する場合、それら_FILE_OFFSET_BITS
を配置するのに最適な場所はどこですか?FUSE_USE_VERSION
_GNU_SOURCE
私が考えたいくつかの可能性は次のとおりです
- そのファイルに含まれるヘッダーによって公開される定義に依存するソースファイルの上部
- 関連するヘッダーのインクルードの直前
CPPFLAGS
コンパイラを介してレベルで定義しますか?(など-D_FILE_OFFSET_BITS=64
):- ソースリポジトリ全体
- プロジェクト全体
- それを必要とするソースだけ
- プロジェクトヘッダー。マクロが適用される関連ヘッダーも含める必要があります。
- 私が考えていなかった他の場所ですが、無限に優れています
注:make、autotools、およびその他のビルドシステムへの適用性による正当化は、私の決定の要因です。
build-system - 再現可能な研究にビルドシステムを使用していますか?
私は、次のプログラムの入力となる出力ファイルを生成するプログラムのパイプラインを含む研究プロジェクトを行っています。目的の出力を作成するために使用した一連のコマンドを簡単に繰り返したいと思います。makeまたはその他のビルド システムがこのタスクに適しているように見えますが、私が調べたすべてのビルド システム (おそらく make 自体を除く)は、ソース コードから実行可能ファイルをビルドすることに強く偏っているようです。他にどうすればいいのかわかりません。ソース コードを実行可能ファイルにコンパイルする以外のタスクにビルド システムを使用した経験のある人はいますか? ビルド システムを簡単に使用して再現性のある研究を促進できますか?それとも、別の種類のツールを探す必要がありますか?
build - Autotools、Cmake、Scons の違いは何ですか?
Autotools、Cmake、Scons の違いは何ですか?
c++ - C++ コンパイルについて
一般的に言えば、ac/c++ コンパイラがどのように機能するのかまったくわからないことに最近気づきました。これは当初、ヘッダー ガードを理解しようとしていたことを認めますが、コンパイルのしくみが不足していることに気づきました。
たとえば、Visual C++ を取り上げます。「Header Files」フォルダ、「Resources Files」フォルダ、「Source Files」フォルダがあります。これらのフォルダーを分離し、そこに何を入れることに何か意味はありますか? 私にとって、それらはすべてソース ファイルです。コード スニペットを見てみましょう。
スニペット 1
と
と
コンパイラは、「a1.cpp(3) : 致命的なエラー C1004: 予期しないファイルの終わりが見つかりました」と言ってエラーを出します。次のコード スニペット
スニペット 2
と
と
「main.cpp(6) : エラー C2065: 'b' : 宣言されていない識別子」のため、エラーが発生します。a1.cpp をそのように含めると
スニペット 3
と
と
コンパイラは、「a1.obj : エラー LNK2005: "int b" (?b@@3HA) は main.obj で既に定義されています」と不平を言います。スニペット 2 と 3 は両方ともint r = 4
、セミコロンが欠落していないという事実を無視しています。これは、xxxx.h ファイルと関係があると思われるためです。スニペット 1 のプロジェクトから a1.cpp ファイルを削除すると、正常にコンパイルされます。明らかに、私が期待していたものは、私が得ているものではありません。cpp でコーディングする方法に関する本やチュートリアルはたくさんありますが、コンパイル プロセスで cpp がファイルやソース コードを処理する方法についてはあまり詳しくありません。ここで何が起こっているのですか?
android - Androidにenvsetup.shのコマンドを含める方法は?
こんにちは、コンパイル中に Android のソース コードでコマンド ./build/envsetup.sh を実行しました。同じファイルにある次のコマンドを使用したい。-cgrep -mmm -mm
しかし、次のエラーが発生します!!
これをどのように解決すればよいですか?envsetup.sh ファイルを変更する必要はありますか?
mono - .sln互換のモノベースCLIビルドシステム?
最近、VisualStudioを使用して他のユーザーとASP.NETMVCの作業を開始しました。MonoDevelopはプロジェクトワークスペースファイル(MSVS2010の.sln)を開いてプロジェクトを正常にビルドできますが、Monoで使用できるCLIビルドツールがあるかどうか知りたいですか?単純にvimを使用してシェルに切り替え、簡単なコマンドを実行してワークスペースを構築したいと思います。これが考慮されている場合、何かアイデアはありますか?
追加のボーナスとして、ctagsまたは同様のプラグインがvimで動作するかどうか誰かが知っていますか?.NET名前空間のドキュメントを時々検索する必要があります。