CMakeを使用してVisual Studio C ++プロジェクトファイルを生成する


91

LinuxとWindowsでコンパイルするコードのために、オープンソースのC ++プロジェクトに取り組んでいます。Linux上でCMakeを使用してコードをビルドしています。開発のセットアップと政治的な理由から、WindowsではVisual Studioプロジェクトファイル/エディターを使用する必要があります(たとえば、Code :: Blocksに切り替えることができません)。こちらのように、CMakeを使用してVisual Studioファイルを生成する手順が表示されます

以前にCMakeを使用してVisual Studioファイルを生成したことがありますか?あなたの経験はどうですか?プロジェクトに新しいファイルを追加したいとします。これのワークフローは何ですか?


1
GNU-LinuxでWindows固有のVisual Studio用のプロジェクトファイルを生成しようとしている場合は、この答えに留意してください。TL; DR:ジェネレーターはプラットフォーム固有であり、これを行うにはWindowsを使用している必要があります。
code_dredd

回答:


57

CMakeは実際にはこれにかなり適しています。重要な部分は、Windows側の全員がソリューションにロードする前にCMakeを実行することを忘れてはならず、Mac側の全員がmakeを実行する前に実行することを忘れてはならないということです。

最も難しいのは、Windows開発者が構造的な変更がソリューションまたはプロジェクトファイルではなくcmakelist.txtファイルにあることを確認することでした。これらの変更はおそらく失われ、失われなくてもMac側に転送されないためです。それらも必要であり、Macの人たちは同じ理由でmakeファイルを変更しないことを覚えておく必要があります。

それは少しの思考と忍耐を必要とするだけですが、最初は間違いがあります。しかし、両側で継続的インテグレーションを使用している場合、これらは早期に混乱し、最終的に人々は習慣になるでしょう。


11
これがかつて真実だった場合、それはもうありません。CMakeLists.txtに変更を加えると、ビルドシステム(ビジュアルスタジオのプロジェクトファイル、メイクファイルなど)が再生成されます。Visual Studioは、何かが変更されたことを検出してもプロジェクトファイルを再生成しないので、Visual Studio内のワークフローは厄介なものです。代わりに、ビルドを実行するのを待機します。 -プロジェクトファイルをロードします。
Vitali

1
これに対する警告は、IDEを介してVisual Studioコンパイラーを実行する必要がないことです。あなたは、コマンドライン上でそれを実行することができます:C:\...> MSBuild ALL_BUILD.vcxproj
PfunnyGuy

2
@PfunnyGuyこちらもご覧くださいcmake --build .
2018

@ありがとうございます!実際に見つけて使用しますcmake --build . --config Debug -- /nologo /verbosity:minimal /m。後. target run_testsから挿入してgoogletestユニットテストを実行します。「Debug」は「Release」に置き換えることができます。(デフォルトのデバッグの構成オプションの追加はオプションですが、「リリース」と交換する方法を示すために含めました)
PfunnyGuy

47

それが質問に直接関連しているかどうかはわかりませんが、cmakeプロジェクトから* .slnを生成する方法の答えを探していたところ、次のようなものを使用できることがわかりました。

cmake -G "Visual Studio 10"

この例では、入力CMakeLists.txtファイルから必要なVS 2010ファイルを生成します


1
stackoverflow.com/questions/11269833/... @IvanこれはあなたのトップレベルCMakeLists.txtと同じフォルダ内のファイルPreLoad.cmakeに入れることができ、その後、あなただけ行うことができますことを指摘cmake
PfunnyGuy 2017年

25

私たちは部署のビルドチェーンをCMakeに移動しました。他の部署がプロジェクトファイルを使用し、それらをソリューションにインポートするだけで慣れているため、いくつかの内部ロードバンプがありました。また、CMakeがVisual Studioプロジェクト/ソリューションマネージャーに完全に統合されていないという不満もあり、ファイルを手動でCMakeLists.txtに追加する必要がありました。これは、人々が慣れ親しんだワークフローの大きな障害でした。

しかし、一般的に、それは非常にスムーズな移行でした。プロジェクトファイルを扱う必要がなくなったので、とても満足しています。

プロジェクトに新しいファイルを追加するための具体的なワークフローは非常に簡単です。

  1. ファイルを作成し、正しい場所にあることを確認します。
  2. ファイルをCMakeLists.txtに追加します。
  3. ビルド。

CMakeLists.txtファイルが変更された場合、CMake 2.6は自動的に再実行します(ソリューション/プロジェクトを(半)自動的に再読み込みします)。

ソース外のビルドを行う場合は、ビルドディレクトリにソースファイルを作成しないように注意する必要があることに注意してください(Visual Studioはビルドディレクトリしか認識しないため)。


9

アレックスが言うように、それは非常にうまく機能します。唯一の注意が必要な部分は、Visual Studio内からではなく、cmakeファイルに変更を加えることを忘れないことです。したがって、すべてのプラットフォームで、ワークフローは単純な古いmakefileを使用した場合と同様です。

しかし、操作は非常に簡単で、無効なファイルなどを生成するcmakeには問題がなかったので、あまり心配する必要はありませんでした。


7

CMakeはVisual Studioプロジェクトとソリューションをシームレスに作成します。CMakeファイルを変更せずに、異なるVisual Studioバージョンのプロジェクト/ソリューションを作成することもできます。

ソースファイルの追加と削除は、 CMakeLists.txtは、ソースファイルのリストを含む、プロジェクト/ソリューションを再生成するだけです。ディレクトリ内のすべてのソースを検索するグロビング関数もあります(ただし、注意して使用する必要があります)。

次のリンクは、CMakeおよびVisual Studio固有の動作を非常によく説明しています。

CMakeとVisual Studio


このリンクとそのサンプルプロジェクトは非常に便利です。ありがとうございます。githubリポジトリのソースコードを回答に組み込むことをお勧めします。たとえば、CMakeプロジェクトはソリューションと同等であり、add_executableのようなものを使用してビジュアルスタジオプロジェクトと同等のものを追加します。
jrh

5

CMakeは本当にすばらしいVisual Studio .projs/を生成できますが、/ ではなくファイル.slnsを変更する必要があるという問題が常にあり.cmakeます。現在のところ、次のように処理しています。.proj.sln

  1. すべてのソースファイルが移動し/src、Visual Studioに表示されるファイルは、で定義されて.filterいるソースファイルへの単なる「リンク」です。
  2. プログラマーは/src、デフォルトのプロジェクトのディレクトリーではなく、定義されたディレクトリーで作業することを覚えているファイルを追加/削除します。
  3. 完了したら、それぞれのスクリプトを「更新」するスクリプトを実行します .cmakeファイルます。
  4. 彼は、再作成された環境でコードをビルドできるかどうかを確認します。
  5. 彼はコードをコミットします。

最初は結果がどうなるか少し不安でしたが、ワークフローは非常にうまく機能し、各コミットの前に素敵な差分が表示されるので、変更が正しくマッピングされているかどうか誰でも簡単に確認できます .cmakeファイルにます。

知っておくべきもう1つの重要なことは、CMakeの「ソリューション構成」に対するサポートの欠如(afaik)です。現状では、プロジェクト/ソリューションを含む2つのディレクトリを生成する必要があります-ビルドタイプ(デバッグ、リリースなど)ごとに1つです。より高度な機能を直接サポートすることはできません。つまり、構成を切り替えても期待どおりの結果が得られません。


4
CMake 2.8.10以降、生成されたソリューションには4つの通常のビルド構成があり、追加のカスタムソリューションを定義するためのサポートがあります。
John


0

syncProjという独自のプロジェクトを開始しました。ドキュメンテーション/ここからリンクをダウンロード:

https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/

Visual Studioを開発に使用する予定で、現在C ++のみがサポートされている場合。

他のmakeシステムと比較した主な利点は、スクリプトがC#ベースであるため、実際にスクリプトをデバッグできることです。

syncProjに慣れていない場合は、ソリューション/プロジェクトを.csスクリプトに変換し、その時点からさらに開発を続けることができます。

cmakeでは、すべてを最初から作成する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.