【发布时间】:2017-07-12 19:50:07
【问题描述】:
首先,我是 CMake 新手。
我想做的是从直接在 VS 2017 中编译我的解决方案切换到 CMake,以便在 Linux 等其他平台上轻松构建项目。
文件夹结构:
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 文件
这是我的 CMakeLists,第一个用于根项目,第二个用于第一个项目和第二个项目:
# 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
第一个和第二个项目的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。
问题:
- 如何将这些 Visual Studio 2017 设置应用到 CMake? (我该如何配置 CMAKE_BINARY_DIR 设置等)
- 项目 2 取决于项目 1,CMake 会自动处理这个问题还是我必须在 CMakeLists.txt 中添加一些内容?
【问题讨论】:
标签: c++ visual-studio compilation cmake visual-studio-2017