タグ付けされた質問 「build-system」

ビルドシステムは、ソースコードをコンパイルし、結果をアセンブル/パッケージ化するために使用されるツールです。


6
javaがビルド言語として使用されないのはなぜですか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 Javaが汎用言語であり、プログラムの構築がJava言語を使用して記述できるものである場合、なぜこれがビルドファイルを記述する最良の方法ではないのか、代わりにAnt、Maven、Gradleなどのツールを使用しますか?それはもっと簡単なことではなく、また別のプログラミング言語を学ぶ必要性を排除しませんか?(ところで-この質問は、C#などの他の言語にも適用できます)
24 java  c#  builds  build-system 

4
インタープリター言語にCIを使用するにはどうすればよいですか?
これまでに継続的インテグレーションシステム(CI)を使用したことがありません。私は主にMATLAB、PythonまたはPHPでコーディングします。これらのどちらにもビルドステップがなく、CIがどのように作業に使用できるかわかりません。大企業の大規模プロジェクトの友人から、言葉は関係ないと言われました。 ビルドステップがない場合、CIがどのように役立つかわかりません。CIは、単体テストを実行するテスト環境と考えることができます。何か不足していますか?

5
ビルドツールが、基礎となるプログラミング言語とは異なるスクリプト言語を使用するのはなぜですか?
私は最近、ほとんどの言語のメインビルドツール/システムが基礎となるプログラミング言語自体とは異なる言語を使用していることに気付いたときに、Nodejsプロジェクトのビルドツールを使用しています。 たとえば、makeはCまたはC ++を使用してスクリプトを記述せず、ant(またはMaven)はスクリプトの言語としてJavaを使用しません。 Rubyのような新しい言語は、rakeのようなビルドツールに同じ言語を使用します。しかし、なぜこれが常に当てはまらないのですか?基礎となる言語とは異なる言語を使用するビルドツールを持つことの利点は何ですか?

1
Mavenに似たHaskellビルドおよびアーティファクト環境
私は以前からJava開発者でしたが、最近、Haskellチームに参加しました。Javaの世界では、複数のチームが取り組んでいる大規模なプロジェクトがある場合、Mavenなどのアーティファクトサーバーを使用して開発を容易にし、スピードアップするのが一般的なアプローチです。Ant、Maven、Gradleなどの多数のビルドツールを使用してプロジェクトをビルドし、jarファイルをアーティファクトサーバーにアップロードして、チームの残りのメンバーが簡単に使用できます。したがって、プロジェクトをより小さなサブプロジェクトに分割することにより、ビルド時間も大幅に短縮されます。 Haskell側ではcabal、プロジェクトのビルドに使用しています。このプロジェクトは、最適化なしでビルドするのに約10〜15分かかります。コンパイラーの最適化がオンになっている場合、数時間かかりますが、これは苦痛です。 ここでJavaで行うのと同じことをどのように行うことができるのでしょうか。パッケージ(ライブラリ)のバイナリをコンパイルしてアーティファクトサーバーにアップロードし、ビルド時にビルド済みのバイナリを使用する簡単な方法はありますか?Haskellは(Javaのバイトコードではなく)マシンコードを生成するため、互換性の問題があるかもしれませんが、アーティファクトサーバーに格納されているアーキテクチャ/ OSごとに異なるバイナリを使用できる可能性があります。

6
makefileに「インストール」ターゲットが必要なのはなぜですか?
CとC ++の世界から来たほとんどのビルドシステムには、installターゲット、特にMakefiles(たとえばGNUが推奨する場所)またはCMakeがあります。このターゲットは、オペレーティングシステム(C:\Program Files\Windowsなど)のランタイムファイル(実行可能ファイル、ライブラリなど)をコピーします。 私にとっては、プログラムをインストールすることはビルドシステムの責任ではないため(実際にはオペレーティングシステム/パッケージマネージャーの責任です)、これは非常にハッキリしています。また、ビルドシステムまたはビルドスクリプトは、環境変数、レジストリ変数、シンボリックリンク、権限などを使用して、インストールされたプログラムの構成を認識している必要があります。 せいぜい、ビルドシステムにはrelease、インストール可能なプログラム(.debまたはなど.msi)を出力するターゲットがあり、そのプログラムをインストールするようオペレーティングシステムに親切に依頼する必要があります。また、ユーザーはを入力せずにアンインストールできmake uninstallます。 だから、私の質問:ビルドシステムは通常、installターゲットを持つことを推奨するのはなぜですか?

4
ビルドスクリプトをC ++で書くのは理にかなっていますか?
私はCMakeを使用してプロジェクトIDE / makefileを生成していますが、それでもコンパイル済みファイルを操作したり、コードを生成したりするためにカスタムの「スクリプト」を呼び出す必要があります。 以前のプロジェクトではPythonを使用していましたが大丈夫でしたが、現在作業中の2つの非常に大きなプロジェクトで多くの依存関係を管理するのが大変なため、どこでも依存関係を最小限に抑えたいと思います。 誰かが、そのための言語依存関係を追加する代わりに、C ++を使用してビルドスクリプトを作成するように私に提案しました。プロジェクトのテーマはすでにC ++を使用しているため、いくつかの利点があります。 プロジェクト全体をビルドするには、C ++コンパイラとCMakeのみが必要であり、他には何も必要ありません(他の依存関係はすべてCまたはC ++です)。 C ++の型安全性(最新のC ++を使用する場合)により、すべてが「正しく」なりやすくなります。 また、私がよく知っている言語でもあるため、優れたPythonコードを書くことができたとしても、安心して使用できます。 実行速度の潜在的な向上(ただし、実際に知覚できるとは思わない); しかし、いくつかの欠点があるかもしれないと思うし、私はまだ試していないので、本当の影響がわからない: コードを書くのに時間がかかるかもしれません(私はC ++で十分に効率が良いのですぐに動作するものを書くので確信がないと言ったので、このシステムでは書くのにそれほど長くはないかもしれません) tこの場合は問題になります); 入力として読み込むテキストファイルはすべてUTF-8であると想定する必要があります。実行時にC ++で簡単にチェックできるかどうかはわかりませんが、言語ではチェックされません。 C ++のライブラリは、スクリプト言語よりも管理が困難です。 私には経験と洞察力が欠けているので、長所と短所が足りないかもしれません。質問は次のとおりです。これにC ++を使用するのは理にかなっていますか?報告する経験はありますか、また重要な利点と欠点がありますか?

2
継続的統合ツールを選択するにはどうすればよいですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新することがありますので、上のトピックソフトウェア工学スタックExchange用。 5年前に閉鎖されました。 ウィキペディアで統合サーバーのこのクールな比較表を見つけましたが、ツールを自分のニーズや興味に対してランク付けする方法が少し不確かです。チャート自体には、不明とマークされたボックスが多数あるようです。したがって、Wikipediaでチャートを更新することに満足しているなら、それも素晴らしいかもしれません。 最高のパフォーマンスを発揮する製品がいくつかあるので、4つまたは5つのオプションにすばやく絞り込むことができますか? 最大のユーザーコミュニティを持ち、現在進行中の機能強化と新しいツールとの統合が最も進んでいる製品はどれですか? オープンソースの提供は最高ですか、それとも自宅の一人のユーザーにとって大いに役立つ高品質のツールがありますか? 複数のシステム(プライマリデスクトップ、ローカルのみのホームネットワークサーバー、個人用および職場のノートブック、すべてに分散した複数の仮想マシン)を使用すると問題が発生し、それらをどのように管理できますか?

2
相対的な予想タスク時間をスケジュールに組み込むビルドシステムはありますか?
これが私の質問の小さな図です: ADという名前の4つの独立したタスクで構成されるビルドジョブを想定します。DはACよりも時間がかかります。 相対的なタスク時間を組み込むことができないビルドシステムは、次のようにタスクをスケジュールする場合があります。 --------------------------------------- CPU1: A | C | --------------------------------------- CPU2: B | D | --------------------------------------- 対照的に、スケジューラがタスクの時間差を認識している場合、次のようなはるかに短いスケジュールが考えられます。 --------------------------------------- CPU1: A | B | C | --------------------------------------- CPU2: D | --------------------------------------- 私の質問: 相対的な予想タスク時間をスケジュールに組み込むビルドシステムはありますか? この種の構築システムに関する学術研究は何ですか? これらのビルドシステム(存在する場合)はどこから時間情報を取得しますか?ヒューリスティック、以前のビルド中に収集されたタイミング? そのようなビルドシステムが存在しない場合、なぜですか?一見しただけで価値がなくなるような落とし穴はありますか?

5
Gitバージョンをビルド番号として統合するかどうか
同僚と私は、現在のgitリポジトリから派生したバージョンをビルドするたびにコードに統合することの問題/メリットを交互に議論/議論しています。 メリットは次のとおりです。 バージョン番号を更新する際に人的エラーを心配する必要はありません デバイスで見つかったものと、そのソースコードのソースコードとの間のトレーサビリティ (私たちにとって)発生した問題は次のとおりです。 IDE派生ビルドシステム(MPLABXなど)は、これらの種類のフックをどこに配置するのかを把握するのを難しくする可能性があります(最終的にはかなり安っぽくなります) これをビルドスクリプト/メイクファイルに実際に統合するためのさらなる作業 特定のビルドアプローチ(たとえば、1人がXCodeと他のMPLABXを使用してビルドした場合)へのカップリングは、ダウンストリームのサプライズを作成する可能性があります だから私たちは他の人がこの議論に上陸した場所に興味があります。議論が逸話になるのは本当に簡単です。エンドツーエンドの自動化に固執し、先行作業とそれが生み出すカップリングの量を掛ける人が大勢います。そして、議論の反対側には多くの人がいます。彼らは、最も簡単なことをして、リスクを抱えて生きています。 どの側に着陸するのが最適であるかについて、合理的な答えはありますか?
12 c  git  builds  build-system 

2
使用するmakeスレッドはいくつありますか?
デスクトップ/ラップトップコンピューターで大規模なシステムを(再)ビルドするとき、次のようmakeに、複数のスレッドを使用してコンパイル速度を上げるように指示します。 $ make -j$[ $K * $C ] どこ$Cの数を示すことになっているコアながら、マシンが持っている(私たちは一桁と番号であることを仮定することができ)$K、私は異なるものだ2と4、私の気分に応じました。 したがって、たとえば、make -j124つのコアがある場合、make最大12のスレッドを使用するように指示することができます。 私の理論的根拠は、私が$Cスレッドのみを使用する場合、プロセスがドライブからデータをフェッチするのにビジーである間、コアはアイドルになるということです。しかし、スレッドの数を制限しない場合(つまりmake -j)、コンテキストの切り替えに時間を浪費したり、メモリを使い果たしたり、さらに悪いことにリスクを冒したりします。マシンに$Mギグのメモリがあると仮定しましょう($Mは10のオーダーです)。 したがって、実行するスレッドの最も効率的な数を選択するための確立された戦略があるかどうか疑問に思っていました。

7
大きなコードベースの(コンパイル)の問題に対処するにはどうすればよいですか?
コーディングはできますが、大規模なプロジェクトでの作業経験はまだありません。私がこれまでに行ったことは、数秒でコンパイルされる小さなプログラム(アルゴリズム、プログラミングの原則、アイデア、パラダイムなどのさまざまなc / c ++の演習、または単にapiを試す...)をコーディングするか、コンパイルが不要なスクリプト言語(python、php、js)で作成。 問題は、スクリプト言語でコーディングするとき、何かがうまくいったかどうかを試したいときはいつでも、スクリプトを実行して何が起こるかを確認することです。うまくいかない場合は、コードを変更し、スクリプトを再度実行してもう一度試すことができます。必要な結果が得られるまでそれを続けます。私のポイントは、待つ必要がないということです。コンパイルするものは何でも、そのため、大きなコードベースを取得、変更、何かを追加、または単に操作するのは非常に簡単です。変更を即座に確認できます。 例として、Wordpressを取り上げます。プラグインを作成する方法を理解するのはとても簡単です。最初に単純な「Hello World」プラグインを作成することから始め、次に管理パネルの単純なインターフェースを作成してAPIに慣れ、次にそれを構築してより複雑なものにし、その間にいくつかの外観を変更します回.. WPと同じくらい大きなものを何度も再コンパイルしなければならないという考えは、マイナーな変更を行うたびに、「動作するかどうか」と「動作するかどうか」を試すために、効率が悪く、遅くて間違っているように思えます。 さて、コンパイルされた言語で書かれたプロジェクトでどうすればいいですか?いくつかのオープンソースプロジェクトに貢献したいのですが、この質問は私を悩ませ続けています。状況はおそらくプロジェクトごとに異なり、事前に賢明に考えられていたもののいくつかは何らかの方法で「モジュラー」になる一方で、他のものは何度も再コンパイルする必要がある1つの大きなblobになるだけです。 これが適切に行われる方法について、もっと知りたいのですが。これに対処するためのいくつかの一般的な実践、アプローチ、およびプロジェクト設計(パターン?)は何ですか?この「モジュール性」はプログラマーの世界でどのように呼ばれていますか?これについてもっと知るために何をググる必要がありますか?プロジェクトが最初の思考の比率から大きくなり、しばらくすると面倒になることがよくありますか?うまく設計されていないプロジェクトの長いコンパイルを回避する方法はありますか?どういうわけかそれらをモジュール化する方法(開発中にプログラムの重要でない部分を除外する可能性があります(他のアイデア?))? ありがとう。

2
Googleスケールでソースからコードベース全体を構築するにはどうすればよいですか?
最初の答え古い、最近アクティブに質問にリンクされている動画、Googleのリポジトリがどのように行われるかについて語っています。 言及された興味深いことの1つは、バイナリに依存することなく、すべてがソースからビルドされるという事実です。これは、依存関係が古くなって他のプロジェクトでまだ使用されているという問題を回避するのに役立ちます。 技術的にどのように可能ですか?私の会社で同じことを試してみると、会社のコードベースの規模とGoogleのコードベースの規模の大きなギャップを考慮しても、2つの理由で不可能です。 IDE(Visual Studio)は、たとえば50のプロジェクトを含む小さなソリューションでさえ大きな影響を受けるため、すぐに応答しなくなります。 静的分析は、コードベース全体のサイズによって処理されます。たとえば、コードメトリックスまたはコードコントラクトの静的チェックはほとんど不可能です(コードコントラクトはおそらく数日または数週間かかります)。 継続的インテグレーションでは、コンパイルにも非常に時間がかかり、多くの依存関係を持つプロジェクトが変更されるとすぐにサーバーがクランチされ、プロジェクトの大きなツリーを再コンパイルする必要があります。 中小企業はこれらの問題をどのようにして回避し、次のことができるのでしょうか。 パフォーマンスの低下に影響されずにIDEを使用します。 変更の結果、大量のコードベースを再コンパイルする必要がある場合でも、サーバーをクランチせずにコミットするたびにコードをコンパイルしますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.