5

成長しているC++プロジェクトをどのように管理すべきか疑問に思っています。現在、私はNetbeansを使用してプロジェクトを開発していますが、makefileを生成するのは汚い作業です。プロジェクトが大きくなりすぎたので、いくつかの部分に分割することにしました。これを行うための最良の方法は何ですか?

ビルドシステムとしてSconsを使用しようとしています。私はそれである程度の成功を収めましたが、ファイルを追加または削除するたびにビルドスクリプトを編集する必要があります。鈍すぎる。

だから私はあなたのアドバイスが必要です。

PSちなみに、グーグルクロームのような大規模なプロジェクトはどのようにこれを行いますか?誰もが何らかのIDEを使用して、ソフトウェア配布専用に生成されたスクリプトを作成していますか?

4

3 に答える 3

4

また、C ++用のNetbeansを使用し、SConsでコンパイルします。私は本当にうまく機能するjViNetbeansプラグインを使用しています。

何らかの理由で、Netbeans Pythonプラグインは公式ではなくなりましたが、私はまったく理解していません。あなたはまだそれを得ることができます、そしてそれは本当にSConsビルドスクリプトを編集することを素晴らしい経験にします。NetbeansにはSConsプラグインがありませんが(まだ?)、SConsを実行するようにビルドコマンドを構成できます。

IDEによってSConsスクリプトを自動的に維持することに関しては、私もそうしません。私はそれを手作業で行います。しかし、私が日常的にこれに対処しなければならないわけではないので、特にスクリプトがどれほど読みやすいかを考えると、それがそれほど重要であるとは思いません。

これは、CMakeについて前述したのと同じことを行うSConsのビルドスクリプトです。

env = Environment()
env.EnsurePythonVersion(2, 5)
env.EnsureSConsVersion(2, 1)

libTarget = env.SharedLibrary(target = 'foo', source = ['a.cpp', 'b.cpp', 'c.pp'])
env.Program(target = 'bar', source = ['bar.cpp', libTarget])

SCons Glob()関数は素晴らしいオプションですが、私はディレクトリ内のすべてのファイルを自動的に構築することをためらう傾向があります。構築するサブディレクトリの一覧表示についても同じことが言えます。私はこれによって十分な回数焼き付けられており、ビルドするファイル/ディレクトリを明示的に指定することを好みます。

SConsが他の選択肢よりも遅いという噂を聞いた場合、SConsGoFastButtonには役立つポインタがいくつかあります。

于 2012-05-14T05:58:16.687 に答える
4

ほとんどの大規模なプロジェクトは、それらの厄介な詳細をすべて自動的に処理するビルドシステムに固執しています。私はCMake(KDEがすべてのコンポーネントに使用しているもの)の大ファンですが、sconsも人気のある選択肢です。私のエディター(KDevelop)はCMakeプロジェクト自体を処理していると思われますが、それほど難しくないため、ビルドスクリプトを自分で編集します。

1つのツールを本当によく学び、それに固執することをお勧めします(興味のあるツールについては、たくさんのドキュメントが用意されています)。まだ行っていない場合は、バージョン管理も確認してください(gitのソフトスポットがありますが、MercurialとSubversionも非常に人気のある選択肢です)。


簡単なCMakeの例:

project("My Awesome Project" CXX)
cmake_minimum_required(VERSION 2.8)
add_library(foo SHARED a.cpp b.cpp c.cpp) #we'll build an so file
add_executable(bar bar.cpp)
target_link_libraries(bar foo) #link bar to foo

これは明らかに些細なケースですが、必要に応じて管理および拡張するのは非常に簡単です。

于 2012-05-14T03:05:51.080 に答える
2

ビルドシステムとしてSconsを使おうとしています。ある程度は成功していますが、ファイルを追加または削除するたびにビルドスクリプトを編集する必要があります。鈍すぎる。

ファイルの編成方法に応じて、たとえば、SconのGlob()関数を使用して、すべてのファイルを個別にリストすることなく、ソースファイルをリストとして取得できます。たとえば、すべてのc ++ソースファイルを実行可能ファイルにビルドするには、次のようにします。

 Program('program', Glob('*.cpp'))

コマンドを使用してCMakeでも同じことができます。

また、SConsを使用している場合は、Pythonであるため、任意のPythonコードを記述してソースファイルリストを作成できます。

また、ファイルを複数のフォルダーに整理し、マスタービルドスクリプトが呼び出すことができる補助SCons(またはCMakeList.txt)ビルドファイルを作成することもできます。

于 2012-05-14T03:15:43.147 に答える