有望な代替案はありますか?[閉まっている]


83

私は長年makeとmakefileを使用しており、コンセプトは健全ですが、実装には望ましいものがあります。

問題を過度に複雑にしないための良い代替案を誰かが見つけましたか?


答えは問題が何であるかに強く依存しませんか?私がそれを使ってやろうとしたことについてmakeは、単純すぎます。
reinierpost 2012年

Ruby Rake、CoffeeScript Cake、Python Scons、Java Ant / Maven、C#MSBuild、クロスプラットフォームCMake
FilBot3 2016年


makefileは簡潔ですが、それ自体が言語です。デバッグが難しいと感じました。Pythonのユーザーの場合を含む多くのパッケージがありsconsluigi(に適応しshouldsee/luck、) 、。snakemake wafJavaの選択肢はたくさんありますが、このスペースは小さすぎてすべてを書き留めることができません。
shouldsee

まだ試していませんが、github.com / casey / justはやや有望に聞こえます。「詳細なエラーメッセージを生成し、makeの特異性を回避するため、makefileのデバッグよりもjustfileのデバッグの方が簡単で驚くこともありません」
Jan-Philip Gehrcke博士

回答:


30

SConsをチェックしてください。たとえば、Doom3とBlenderはそれを利用しています。


スコーンの+ 1-概念的には十分に似ているので、頭を動かすのは簡単ですが、makeに関するもっとひどく壊れたもののいくつかを修正します(名前のスペースの処理など)。
トム

5
SConsはPython2のみであり、数日を無駄にした後、SConsを使用してPythonおよびC ++で記述されたプロジェクトのPython3バージョンをコンパイルした後は、近づかないようにアドバイスします。CMakeを使用するだけで、この時点でC ++の標準になりつつあります。または、Pythonベースのビルドシステムを使用する場合は、Mesonを使用します。それは高速で実行され、活発に開発されていますが、これはSConsには言えません。
ostrokach 2017

SConsは2017年9月(上記のコメントが書かれてから5か月後)からPython 3をサポートしており、バージョン4.0(2020年7月)以降のみPython3です。
MichaelPlatings20年

27

クロスプラットフォーム開発のためにCMakeを誓う友人がたくさんいます。

http://www.cmake.org/

これは、(とりわけ)VTKに使用されるビルドシステムであり、クロスプラットフォームのPython、Tcl、およびJavaバインディングを備えたC ++ライブラリです。おそらく、これほど多くの機能を備えた最も複雑でないものだと思います。

あなたはいつでも標準のautotoolsを試すことができます。Unixでのみ実行していて、C / C ++に固執している場合、Automakeファイルは非常に簡単にまとめることができます。統合はより複雑であり、autotoolsはこれまでで最も単純なシステムとはほど遠いものです。


9
CMakeはまだメイクファイルを生成するだけであることに注意してください。したがって、GNU Makeの実装の問題が、必要なことを実行できないことである場合、CMakeはおそらく役に立ちません。またはautotools、そのことについては。
トム

15
CMakeはメイクファイルを生成するだけではありません。CMakeは、さまざまなコンパイラやプラットフォームを対象に、さまざまな種類のビルドファイルを生成できます。個人的には、設定構文が絶対に嫌なので、CMakeは嫌いです。
taywee 2016

19

doitはPythonツールです。これはビルドツールの概念に基づいていますが、より一般的です。

  • タスク/ルールがどのように最新であるかを定義できます(タイムスタンプをチェックするだけでなく、ターゲットファイルは必要ありません)
  • 依存関係は他のタスクによって動的に計算できます
  • タスクのアクションは、Python関数またはシェルコマンドにすることができます

1
この答えに感謝します、doitは素晴らしいツールのように見えます
Bedros 2018

16

GNOMEプロジェクトのいくつかはwafに移行しています。

これはSconsのようにPythonベースですが、スタンドアロンでもあります。したがって、他の開発者にお気に入りのビルドツールをインストールする必要はなく、スタンドアロンのビルドスクリプトをプロジェクトにコピーするだけです。


14

Rakeの使用をお勧めします。それは私が見つけた最も簡単なツールです。

ただし、Rubyがあなたのものでない場合、私が使用した他の優れたツールは次のとおりです。

  • AAP(Python)
  • SCons(Python)
  • Ant(Java、XMLでの構成、かなり複雑)

7

およびのninja影響を受けるビルドツール(v1.8.2 2017年9月)に注意してください。tupredo

ビルドファイルジェネレーターcmake(Unix Makefiles、Visual Studio、XCode、Eclipse CDTなど)もninjaバージョン2.8.8(2012年4月)以降のビルドファイルを生成でき、afaikninjaは現在でもデフォルトのビルドツールとして使用されています。cmake。で。

makeツールよりもパフォーマンスが優れていると考えられます(依存関係の追跡が向上し、並列化されます)。

cmakeはすでに確立されたツールです。構成ファイルを変更せずに、後でいつでもビルドツールを選択できます。したがって、より良いビルドが将来開発された場合、それはによってサポートされますcmake場合は、便利に切り替えることができます。

c / c ++の場合、プリプロセッサを介してヘッダーが含まれているため(特に、boosteigenなどのヘッダーのみのライブラリを使用している場合)、コンパイル時間が制限されることがあります。これは、モジュールの提案に置き換えられることを願っています(テクニカルレビュー) c ++ 11または最終的にはc ++ 1y)。この問題の詳細については、このプレゼンテーションを確認してください。


3
特に、ヒューズカーネル拡張機能が実行さtupfuseているかどうかに依存します。これは、私に関する限り、メンテナが頭がおかしいことを示唆しています。redo2年間更新されていません。私はお勧めしninjaます。
mxcl 2013

5

makefileのようなものを非常に読みやすく書きやすくしようとするsakeというツールを書きました。


面白い; しかし、日本酒が「読み書き」しやすいと思う理由について少し教えていただけますか?質問に答えるためにプロジェクトをインストールする必要はありません。
Dour High Arch 2014

承知しました!元の質問の作成者がMakeの実装について「問題を過度に複雑にしている」ことを懸念した理由の一部のように思えましたが、これはmakefileの構文があいまいなためでした。Sakeは、YAMLで記述されたファイルを使用します。私が他の人の入力から収集したものから、読み取りと書き込みがはるかに簡単になります。
tonyfischetti 2014年

YAML構文を使用しているという事実は、おそらくYAMLがmake構文とどのように対照的であるかについての詳細を含めて、答えの一部になるはずです。
Aaron Novstrup 2014年

ビルドスクリプトにSakeを使用したところ、すばらしいです。書いてくれてありがとう!
nooblar 2015

日本酒は驚くほどシンプルです。
ダン

4

それはあなたが何をしようとしているのかによります。場合は、すべてあなたがしたいが、メイクスタイルのターゲットの依存関係とコマンド呼び出しで、その後、メイクは実際には、タスクのためのより良いツールの一つです。:-)熊手はとてもいいですが、いくつかの単純なケースでは不器用になることがあります。Antはもちろん冗長な都市ですが、Javaのような言語(ScalaとGroovyを含む)の構築をより適切にサポートしています。また、Antはどこでも利用できます。それが私がそれを使う主な理由です。Windowsで一貫して動作するため、実際にはMakeよりもさらにクロスプラットフォームです。

Javaのようなライブラリの依存関係管理が必要な場合は、Mavenが標準的な選択肢ですが、個人的にはBuildrの方がはるかに好きです。カスタマイズがより速く、はるかに簡単です(Rakeに基づいています)。残念ながら、まだMavenほどユビキタスではありません。



2

たくさんの選択肢を検討した後でも、私は作ることを好みます。コンパイラーまたはfastdepのようなものを介して依存関係を自動生成する場合、やるべきことはあまりありません。特に、ビルドスクリプトを実装言語に結び付けたくないし、より読みやすい代替手段が利用できるときにXMLで何かを書くのも好きではありません。汎用言語を公開するツールにはメリットがありますが、さらに別のインタープリター言語にはメリットがありません(afaik)。 Makeの何が問題になっていますか?makeから離れることについてのあなたの視点にアピールするかもしれません。

/アラン


私もMakeが好きです。これは標準的なものであり、どこでも利用できます。プロジェクトに不慣れな人が以前に使用したことがある可能性は十分にあります(または、少なくとも他の何よりも良い可能性があります)。だが。Visual C ++用に記述された大きなコードベース(数千のC ++ソースファイル)があり、Linux上のGCCでビルドしようとしています。Makeはビルドツールの当然の選択のように思われ、vcxprojファイルを解析してMakefileを生成する手っ取り早いコンバーターを作成しました。名前にスペースが含まれるプロジェクトで試してみるまでは、すべて素晴らしかったです。私たちは何をすべきか?
トム

記録のために、私はSConsに行き着きました。とにかく私たちのコンバーターはPythonで書かれているので、代わりにそれをSConscriptに変換するのはとても簡単でした。
トム

@Tom vcxprojファイルパーサーのコピーはどこで入手できますか?私もWindowsで小さなプロジェクトに取り組んでおり、ubuntuに移植したいと思っています。
ダン

@ Maverick-申し訳ありませんが、それは独占的なものであり、私はもうそこで働いていません。複雑なビルドシステムでは、それを再現するのは簡単ではありません。VSワークスペースファイルは「単なるXML」であり、ビルドするソースファイルと適用するオプションを把握することはそれほどひどいことではありませんが、ビルド構成(デバッグ、リリース)を考慮に入れる必要があり、ソリューションと個々のプロジェクトが他の任意のmsbuildファイルもインポートします。私たちが検討したもう1つのオプションは、msbuildを使用してGCCをターゲットにすることでした。それ以来、msbuildはかなり成熟しているため、これが簡単になりました。
トム

1

RTDAのFlowTracerは、大規模な環境(数万のジョブ)で商業的に使用されているのを私が見たもう1つの良い選択です:http://www.rtda.com/flowtracer-design-flow-infrastructure-software

ジョブの場合は色分けされたボックス、ファイルの場合は楕円形の依存関係グラフを表示するGUIがあります。ジョブとファイルの数が多くなると、FlowTracerのようなGUIベースのツールが非常に重要になります。

初期設定費用はMakeよりも高くなります。それを使用して最初のフローを設定するための学習曲線があります。その後、それは速くなります。


0

ここで正しい質問をしているのかどうかはわかりません。

あなたは単純化されたメイクをしたいですか?その場合、makeに精通している人に、問題を単純化する一連の(M | m)akefileを作成してもらう必要があります。

それとも、基盤となるテクノロジーを見たいですか?コード設計に組み込まれ、適用される契約による設計タイプのアーキテクチャを適用したいですか?あるいは、言語自体、たとえばAdaとその仕様(インターフェース)および本体(実装)の概念?

あなたが求めている方向は、そのような質問の潜在的な結果に間違いなく影響しますか?

基本的に、実際に変更されたコンポーネントのみからシステムを構築する新しい方法と、そのようなメカニズムが設計によって組み込まれている新しいテクノロジーの採用。

申し訳ありませんが、それは直接の答えではありません。どの道を進みたいかを評価してもらいたかっただけです。

乾杯、

ロブ


複雑な質問に対する簡単な答えは不可能です。質問にもっと焦点を当てることが役立つでしょう。
ロブ・ウェルズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.