LinuxとWindowsでコンパイルするコードのオープンソースC++プロジェクトに取り組んでいます。 LinuxでCMakeを使用してコードをビルドします。開発のセットアップを簡単にし、政治的な理由から、WindowsのVisual Studioプロジェクトファイル/エディターに固執する必要があります(たとえば、 Code :: Blocks に切り替えることはできません)。 here のように、CMakeを使用してVisual Studioファイルを生成する手順が表示されます。
以前にCMakeを使用してVisual Studioファイルを生成したことがありますか?あなたの経験はどうでしたか?プロジェクトに新しいファイルを追加するとします。これのワークフローは何ですか?
CMakeは実際にこれにかなり適しています。重要な部分は、Windows側の全員がソリューションにロードする前にCMakeを実行することを覚えておく必要があり、Mac側の全員がmakeの前にCMakeを実行することを覚えなければならないことでした。
最も困難なのは、Windows開発者として、構造変更がcmakelist.txtファイルにあり、ソリューションまたはプロジェクトファイルにないことを確認することでした。また、それらが必要であり、Macの担当者は同じ理由でmakeファイルを変更しないことを覚えておく必要があります。
ちょっとした考えと忍耐が必要ですが、最初は間違いがあります。しかし、両側で continuous integration を使用している場合、これらは早期に揺り動かされ、人々は最終的に習慣になります。
それが質問に直接関連しているかどうかはわかりませんが、私はcmakeプロジェクトから* .slnを生成する方法の答えを探していました。次のようなものを使用できることがわかりました。
cmake -G "Visual Studio 10"
この例では、入力CMakeLists.txtファイルから必要なVS 2010ファイルを生成します
部門のビルドチェーンをCMakeに移動し、プロジェクトファイルを使用し、それらをソリューションにインポートするだけの慣習であった他の部門以来、いくつかの内部ロードバンプがありました。また、CMakeがVisual Studioプロジェクト/ソリューションマネージャーに完全に統合されていないという苦情もあったため、ファイルをCMakeLists.txtに手動で追加する必要がありました。これは、人々が慣れ親しんでいたワークフローの大きな中断でした。
しかし、一般的に、それは非常にスムーズな移行でした。プロジェクトファイルを処理する必要がなくなったため、非常に満足しています。
プロジェクトに新しいファイルを追加するための具体的なワークフローは非常に簡単です。
CMakeLists.txtファイルが変更された場合、CMake 2.6は自動的に再実行されます(ソリューション/プロジェクトを(半)自動で再読み込みします)。
ソース外のビルドを行う場合は、ビルドディレクトリにソースファイルを作成しないように注意する必要があることに注意してください(Visual Studioはビルドディレクトリのみを知っているため)。
アレックスが言うように、それは非常にうまく機能します。唯一のトリッキーな部分は、Visual Studio内からではなく、cmakeファイルに変更を加えることを忘れないことです。そのため、すべてのプラットフォームで、単純な古いメイクファイルを使用した場合とワークフローは似ています。
しかし、作業はかなり簡単で、無効なファイルやそのようなものを生成するcmakeの問題はなかったので、あまり心配する必要はありません。
CMakeは、Visual Studioプロジェクトとソリューションをシームレスに生成します。 CMakeファイルを変更せずに、異なるVisual Studioバージョンのプロジェクト/ソリューションを作成することもできます。
ソースファイルの追加と削除は、単にCMakeLists.txt
ソースファイルのリストがあり、プロジェクト/ソリューションを再生成します。ディレクトリ内のすべてのソースを見つけるためのグロビング機能もあります(ただし、注意して使用する必要があります)。
次のリンクは、CMakeおよびVisual Studio固有の動作を非常によく説明しています。
CMakeは本当に素晴らしいVisual Studio .projs
/.slns
を生成できますが、.cmake
/.proj
ではなく.sln
ファイルを変更する必要があるという問題が常にあります。 。現在のところ、次のように対処しています。
/src
に移動し、Visual Studioで表示されるファイルは、.filter
で定義されたファイルへの「リンク」にすぎません。/src
ディレクトリで作業することを忘れないでファイルを追加/削除します。.cmake
ファイルを「更新」するスクリプトを実行します。最初はどうなるか少し不安でしたが、ワークフローは非常にうまく機能し、各コミットの前にNice diffが表示されるため、誰もが彼の変更が.cmake
ファイルに正しくマップされているかどうかを簡単に確認できます。
知っておくべきもう1つの重要なことは、CMakeの「ソリューション構成」に対するサポートの欠如(afaik)です。現状では、生成する必要があります 二 プロジェクト/ソリューションを含むディレクトリ-ビルドタイプ(デバッグ、リリースなど)ごとに1つ。より高度な機能を直接サポートすることはありません-言い換えると、構成を切り替えても期待したものが得られません。
ここにはたくさんの素晴らしい答えがありますが、これに取って代わられるかもしれません Visual StudioでのCMakeサポート(Oct 5 2016)
SyncProjと呼ばれる独自のプロジェクトを開始しました。ここからドキュメント/ダウンロードリンク:
https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit#https://sourceforge.net/projects/syncproj/
開発にVisual Studioを使用する予定で、現在C++のみがサポートされている場合。
他のmakeシステムと比較した主な利点は、C#ベースであるため、実際にスクリプトをデバッグできることです。
SyncProjに慣れていない場合は、ソリューション/プロジェクトを.csスクリプトに変換し、その時点からさらに開発を続けることができます。
Cmakeでは、すべてをゼロから作成する必要があります。