まず、私はCMakeを初めて使う人です。Visual Studio用のCMakeマルチプロジェクトセットアップ2017
私がしたいことは、Linuxのような他のプラットフォームで簡単にプロジェクトを構築するためにVS 2017で直接ソリューションをコンパイルすることからCMakeに切り替えることです。
フォルダ構造:
:そして、ここでは私のCMakeLists、ルートプロジェクトのための最初のものである
project
|─── CMakeLists.txt
|─── bin
| | ─── intermediates
| | |─── Win32
| | | |─── Debug
| | | └─── Release
| | └─── Linux
| | |─── Debug
| | └─── Release
| |─── Win32
| | |─── Debug
| | └─── Release
| └─── Linux
| |─── Debug
| └─── Release
|─── include
|─── Project 1
| |─── CMakeLists.txt
| |─── src
| |─── res
| └─── header
└─── Project 2
|─── CMakeLists.txt
|─── src
|─── res
└─── header
cmakeのファイルには、もう一つは最初のプロジェクトと第二のプロジェクトのためにあります# Specify the minimum version for CMake
cmake_minimum_required(VERSION 3.8.2)
# Project's name
project(Project X)
# Set the C++ Version
message("!REQUIRED! -- Supported features = ${cxx_std_14}")
message("Supported features = ${cxx_std_17}")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Set the output folder where the program will be created
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
# Add the modules
add_subdirectory(Project 1)
add_subdirectory(Project 2) # depends on Project 1
# Specify the minimum version for CMake
cmake_minimum_required(VERSION 3.8.2)
# Project's name
project(Project X)
# Set the C++ Version
message("!REQUIRED! -- Supported features = ${cxx_std_14}")
message("Supported features = ${cxx_std_17}")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Set the output folder where the program will be created
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
# Add the modules
add_subdirectory(Project 1)
add_subdirectory(Project 2) # depends on Project 1
1番目と2番目のプロジェクトのCMakeLists.txtは、ファイルの内容と同じです:
# Specify the minimum version for CMake
cmake_minimum_required(VERSION 3.8.2)
project(Project 1)
# In order to find all cpp files automatically for compilation
file(GLOB CPP_FILES src/*.cpp)
file(GLOB CPP_FILES header/*.h)
# Set the version number of the project here
set(VERSION_MAJOR "0")
set(VERSION_MINOR "1")
set(VERSION_PATCH "0")
set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
そして、これは私のVSの設定です:
Output Directory: $(SolutionDir)bin\$(Platform)\$(Configuration)\
Intermediate Directory: $(SolutionDir)bin\intermediates\$(Platform)\$(Configuration)\
プロジェクトBプロジェクトAがプロジェクトBは、コンパイルするためには、プロジェクトBにリンクする必要があるだけでlibにある一方で、この場合に実行可能です。
質問:
- 私はCMakeのにそれらのVisual Studio 2017の設定を適用するにはどうすればよいですか? (どのように私はなどCMAKE_BINARY_DIR設定を構成する必要があります)
- プロジェクト2は、プロジェクト1に依存し、CMakeのは、これを自動的に処理しますか私はCMakeLists.txtに何かを追加する必要がありますか?
**〜1:「純粋にアウト・オブ・ソース・ビルド」だろう、なぜ**あなたは状態でしたより良い? ** 2へ:**私はCMakeの設定をVSの設定と同じにします。 ** To 5:**手動で何百ものファイルを書きたくないので、どのようにしてすべてのソースファイルをコンパイルすることができますか? – ShadowDragon
@ ShadowDragon ** 1 **これは厳密には必要ではありませんが、それはCMakeの推奨動作モードです。 "CMake out-of-source"はgooglableでなければなりません。しかし、ディレクトリが少なくとも別個であるあなたの元のアイデアは合理的にうまくいきます。 ** 2 **答えはそれを示しています。それは実際にあなたの "アンダーソース"設定にも機能します。 ** 5 **リスト( 'set()'呼び出しを 'include()'とは別のファイルに移動して、スクリプトや何かを使って初めて生成することができます。その後、手動で更新してください。 – Angew