首先,我对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中添加一些内容?
set()
调用)移动到一个单独的文件中,您将使用include()
导入它,并使用脚本或其他工具为第一次生成它。然后只需手动更新它。 - Angew is no longer proud of SO