2009-02-27 2 views
4

私は理想的には、IDEベースのプロジェクトファイルを必要とせずに、プロジェクトを構築する理想的な方法を知っています。理論的には、しかし、私はVisualStudioプロジェクトに依存しないWindows上でコンパイルするプロジェクトに取り組んでいません。(確かに、いくつかのオープンソースのものはCygwinでやっていますが、ここでは一般的です)。VisualStudioでMakefilesを使う良いテクニックは?

一方、VSを使ってメイクファイルを実行すると、コンパイルオプションウィンドウのメリットがすべて失われ、外部メイクファイルを維持するのが難しくなります。

VSを使用する人は、実際に外部メイクファイルをどのように処理しますか?私はまだこれを行う痛みのないシステムを見つける必要があります...

または実際にはほとんどの人はこれをしないでください、その良い練習として説教?

答えて

2

我々は、コンパイル時にステップがMSBuildのを呼び出すNAntのスクリプトを使用します。 NAntを使用すると、ソースコントロールのリビジョン番号と照合するバージョン番号の設定、コードカバレッジ情報の照合、デプロイメントソースのアセンブルおよび圧縮など、ビルド前およびビルド後の両方のタスクを実行できます。しかし、それでも、その中心には、実際にコンパイルを行っているのはMSBuildです。

NAntビルドをカスタムツールとしてIDEに統合することができます。これにより、ビルドまたは継続的インテグレーションサーバーと開発者が同じ方法で使用できます。

1

個人的には、Rakeを使用して、私の解決策またはプロジェクトでmsbuildと電話します。定期的な開発のために私はIDEとすべてのメリットを使用します。

Rakeは、テストのコンパイル、コンパイル、実行、実行テストのコンパイル、および展開可能な成果物の作成ができるように設定されています。

ビルドスクリプトを作成したら、継続的な統合を設定し、それを使って展開を自動化するなどの作業を開始するのは簡単です。

follow these steps to set it upの場合は、IDE内からほとんどのビルドツールを使用することもできます。

+0

Garry:私は、MsBuildとRakeを一緒に使用していることに関して質問があります。私はあなたの答えを得るのが大好きです!ありがとう! http://stackoverflow.com/questions/679009/anyone-have-experience-calling-rake-from-msbuild-for-code-gen-and-other-benefits –

+0

私が正直であれば、それは私がやったことを超えています。あなたや他の人が何を思いついているかを知ることに興味があるので、私はその質問に注目していきます。 –

+0

私たちはmsbuildを直接呼び出すだけで、ロケット科学ではありません。 –

2

実際にはおそらく、

メイクファイルはビルドマスターとしての好みですが、開発者はビジュアルスタジオIDEの中ですべての時間を費やしています。変更を加えると、メイクファイルではなくvcprojファイルになります。だから、私がmakefileでグローバルビルドをやっていると、それは8~10個の他のプロジェクトで、プロジェクト/ソリューションファイルとの同期がとれなくなりすぎます。

私がチーム全体の一歩を踏むことができる唯一の方法は、ビルドプロセススクリプトでソリューションファイルのdevenv.exeを直接実行することです。

私のビルドには、ビルド前またはカスタムのビルドセクションや別のユーティリティプロジェクトにあるメイクファイルはほとんどありません。

+0

カスタムビルディングで何が問題になっていますか?これは、メイクファイルを最新に保つことを強制するのですか? –

+0

開発者はIDEを他のすべてよりも好むので、Nmakeを学ばせることはできません。それは私の肩にメイクファイルのメンテナンスをすべて入れ、私は彼らのために彼らの仕事をするつもりはない。 – SumoRunner

+0

devenv.exeを実行する必要はありません。 Msbuildは.NETフレームワークの一部です。 –

1

ビルドスクリプト(またはコマンドライン)からプロジェクトをビルドするためにdevenv.exe(IDEを起動するのと同じexe)を使用します。 IDEが表示されていないと、すべてがコンソールに書き戻される/ビルドオプションを指定すると

詳細についてはhttp://msdn.microsoft.com/en-us/library/xee0c8y7(VS.80).aspxを参照してください(またはログファイルを、あなたは/アウトオプションを指定した場合)

例:

devenv.exe [ソリューションファイル名] /ビルド[プロジェクト名]/Rebuild "Release | Win32"/Out solution.log

ここで、 "Release | Win32"は、ソリューションおよびソリューションで定義されている構成です。 .logは、コンパイラの出力を取得するファイルです(これは、c言語で何が問題になったのかを理解する必要があるときには非常に便利です)。 ompile)

+0

実際にコンソールに結果を表示するのはdevenv.comです。 devenv.exeは実行後直ちに戻りビルドプロセスをバックグラウンドで行います。 – macbirdie

+0

少なくともVS 2005の場合です。 – macbirdie

+0

VSはソリューションとプロジェクトのコンパイルにmsbuildを使用するので、コンソールビルドにmsbuildを使用する方が良いです – abatishchev

1

私たちは、vcprojファイルを解析し、そこからメイクファイルの断片を生成するプログラムを持っています。 (これらにはファイルと#defineのリストが含まれており、カスタムビルドステップのサポートは限られています。)これらのフラグメントは通常のGNU make stuffを行うマスターmakefileに含まれます。

(これは、我々がターゲットシステムの一つのためにすべてであり、そのツールは、Visual Studioのためのネイティブサポートを持っていません。)

これを仕事の膨大な量を必要としませんでした。それを設定する日、そしてすぐにはっきりしないいくつかの問題を打ち消すために、おそらく1日か2日かかります。そしてそれはかなりうまくいく:コンパイラの設定はマスターのメイクファイルによって制御されているが、誰も新しいファイルを追加して普通の方法でビルドすることができる。

つまり、Visual Studioのビルド構成の処理に固有の組み合わせの問題は残っています。

5

MSBuildをご覧ください!

  • MSBuildはVSのsln/csprojファイルで動作するので、単純なプロジェクトの場合は直接呼び出すことができます。
  • さらに制御が必要な場合は、独自のビルドプロセスでプロジェクトをラップし、独自のタスクなどを追加します。非常に拡張性があります。

(私はサンプルを追加したかったが、このediorは完全に申し訳ありませんXMLを...めちゃめちゃ)

1

「VisualStudioプロジェクトに依存しないWindowsでコンパイル」するプロジェクトを作成したいのはなぜですか?あなたはすでにソリューションファイルを持っています。あなたはコンソールビルドでそれを使うことができます。

私が欠けている何かが

あります...あなたのビルドシステムは我々のように複雑でない場合は、メイクファイル、NAntのかさえ、単純なバッチファイルとの関連でのMSBuildを使用するように助言するだろうか?

+0

システムの10個のコンポーネントとモジュールの完全なビルドには、約2時間(リリースのみ)、すべてのビルド・モードではさらに数時間かかります。システムのプラス8は、UNIXと他のコンパイラのもとでコンパイルする必要があります。うん、それは種類の複雑です:) –

+0

私たちはUNIXとWindows用のビルドをする必要があります。このために、私たちはmsbuild、makefiles、antの組​​み合わせを使用します。それは悪いことではありません:)おそらく、ビルドプロセスを最適化しようとする必要があります - 少なくとも反復構築速度。我々は最近、35分から7時までのビルド時間を削減しました... – ya23

+0

ソリッドステートドライブがあります。なぜなら、リンクと完全なプログラムの最適化が時間の約3分の1を食べるからです。他の最適化を検討しましたが、まだ運はありません。 いずれにしてもセットアップは現在の設定よりも優先しますが、ビルドエンジニアはいません。 –

1

このコードはどうですか?

public TRunner CleanOutput() 
{ 
    ScriptExecutionEnvironment.LogTaskStarted("Cleaning solution outputs"); 

    solution.ForEachProject(
     delegate (VSProjectInfo projectInfo) 
      {    
       string projectOutputPath = GetProjectOutputPath(projectInfo.ProjectName); 

       if (projectOutputPath == null) 
        return; 

       projectOutputPath = Path.Combine(projectInfo.ProjectDirectoryPath, projectOutputPath); 

       DeleteDirectory(projectOutputPath, false); 

       string projectObjPath = String.Format(
        CultureInfo.InvariantCulture, 
        @"{0}\obj\{1}", 
        projectInfo.ProjectName, 
        buildConfiguration); 
       projectObjPath = Path.Combine(productRootDir, projectObjPath); 
       DeleteDirectory(projectObjPath, false); 
      }); 

    ScriptExecutionEnvironment.LogTaskFinished(); 
    return ReturnThisTRunner(); 
} 

public TRunner CompileSolution() 
{ 
    ScriptExecutionEnvironment.LogTaskStarted ("Compiling the solution"); 

    ProgramRunner 
     .AddArgument(MakePathFromRootDir(productId) + ".sln") 
     .AddArgument("/p:Configuration={0}", buildConfiguration) 
     .AddArgument("/p:Platform=Any CPU") 
     .AddArgument("/consoleloggerparameters:NoSummary") 
     .Run(@"C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe"); 

    ScriptExecutionEnvironment.LogTaskFinished(); 
    return ReturnThisTRunner(); 
} 

あなたがここにそれの残りの部分を見つけることができます。http://code.google.com/p/projectpilot/source/browse/trunk/Flubu/Builds/BuildRunner.cs

+0

興味深い提案 –

1

私はまだそれを自分で試していないが、MicrosoftはVisual Studioの統合を持っているようだNMAKEと呼ばれるメイクの実装があります。

+0

- nmakeは古いですが、何年も何年も続いています。これは、.NET Framework sDKおよびWindows SDKの一部として提供されます。しかし、VSがビルドに使うものではありません。 Visual Studioはmsbuildを使用します。それはあなたが調べなければならないものです。 – Cheeso

3

1つの可能性はCMakeです - プロジェクトの作成方法をスクリプトで記述し、CMakeはVisual Studioソリューション/プロジェクトファイルを生成します。

コマンドラインまたは継続的な統合ツールでプロジェクトをビルドする必要がある場合は、CMakeを使用してNMake用のMakefileを生成します。

クロスプラットフォームの場合、CMakeを実行して、選択したツールチェーンのメイクファイルを生成することができます。

、単純なCMakeのスクリプトは次のようになります。

project(hello) 
add_executable(hello hello.cpp) 

メイクファイルまたはセットアップお気に入りのIDEで簡単なプロジェクトな方法でこれらの2行を比較。一言で言えばCMakeので

だけでなくクロスプラットフォームは、それはまたそれがクロスIDE作るプロジェクトをイネーブルにしますありません。 eclipseやKDevelop、またはcodeblocksでプロジェクトをテストするだけなら、CMakeを実行して対応するプロジェクトファイルを生成してください。

実際、それは必ずしも簡単ではありませんが、CMakeのアイデアはただ揺れています。

たとえば、Visual StudioでCMakeを使用することを検討すると、使い慣れたVSプロジェクトの感覚を得るためにはいくつかの調整が必要ですが、主な障害はヘッダーとソースファイルを整理することですが、CMake wiki短いスクリプトを書くことでこの作業を単純化することもできます)。

1

VS2005以降、Visual Studioでは "msbuild"を使用してビルドを定義して実行します。 Visual Studioデザイナのプロジェクト設定を操作するときに、XMLドキュメントの生成をオンまたはオフにしたり、新しい依存関係を追加したり、新しいプロジェクトやアセンブリ参照を追加したりするとします。Visual Studioは.csproj(または。 vbprojなど)ファイルを作成します。これはmsbuildファイルです。

以前のJavaのantやNantと同様に、msbuildはXMLスキーマを使用してプロジェクトとビルドを記述します。これはVSから "F6"ビルドを実行するときに実行され、VSを開いたりdevenv.exeを実行することなく、コマンドラインから実行することもできます。

したがって、自動ビルド(同じビルドと同じプロジェクト構造)には、VSツールを使用して開発およびコマンドラインmsbuildを使用します。

+1

ほぼ - Visual Studio 2005および2009は、VBおよびC#プロジェクトのみmsbuildを使用します。 CおよびC++プロジェクトでは、これらのバージョンで古いvcprojエンジンが使用されています。 VS2010は明らかにMSBuild for C++にも切り替わります。 外部メイクファイルについて話しているなら、彼はCまたはC++を構築している可能性があります。 –

関連する問題