4

プロジェクトの定義に CMake を使用しています。私の目標は、プラットフォーム固有のファイルに簡単にアクセスして、すべてのプラットフォームで編集、検索、参照、およびソース管理を行えるようにすることです。

現在、cmake の説明でプラットフォーム固有のファイルが分離されています。私の CMakeLists.txt ファイルは次のようになります。

 Foo.hpp
 ${platform_directory}/Foo.cpp

次に、ディスク上に次のようなものがあります。

 Foo.hpp
 win
  `- Foo.cpp 
 osx
  `- Foo.cpp 

生成されたプロジェクト ファイルは次のようになります。

 Foo.hpp
 Foo.cpp (platform-specific version)

これはコンパイラには最適ですが、ネイティブではないプラットフォーム固有のファイルに対する IDE ツールが開発者に不足していることを意味します。

私が探しているのは、次のようなものです(Xcodeで):

 Foo.hpp
 Foo.cpp (OS X version)
 win
  `- Foo.cpp (file type set to plain text)

または Visual Studio で:

 Foo.hpp
 Foo.cpp (Windows version)
 osx
  `- Foo.cpp (build action set to none)

このようなものを CMake にセットアップする方法についてのアイデアはありますか?

4

2 に答える 2

5

1 つの方法は、特に特定のプラットフォームのビルドの一部ではないファイルを保持するために、ビルド ルールなしでカスタム ターゲットを追加することです。例えば

if(WIN32)
  add_library(Foo Foo.hpp win/Foo.cpp)
  add_custom_target(NonWindows SOURCES osx/Foo.cpp)
  source_group("osx" osx/Foo.cpp)
else(APPLE)
  add_library(Foo Foo.hpp osx/Foo.cpp)
  add_custom_target(NonApple SOURCES win/Foo.cpp)
  source_group("win" win/Foo.cpp)
endif()

別のオプション (おそらく希望に近いが、もう少し「ハッキー」) は、すべてのファイルをターゲットに追加することですが、ビルドに必要のないものは次のようにマークしますHEADER_FILE_ONLY

add_library(Foo Foo.hpp win/Foo.cpp osx/Foo.cpp)
if(WIN32)
  set_source_files_properties(osx/Foo.cpp PROPERTIES HEADER_FILE_ONLY TRUE)
  source_group("osx" osx/Foo.cpp)
else(APPLE)
  set_source_files_properties(win/Foo.cpp PROPERTIES HEADER_FILE_ONLY TRUE)
  source_group("win" win/Foo.cpp)
endif()
于 2013-02-05T08:28:17.467 に答える