cmake
跨平台的安装(编译)工具
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
单项目构建
基础
1 | cmake_minimum_required(VERSION 3.3.0) |
模快组织
文件目录结构
头文件和源文件分离
1 | option(USE_SOLUTION_FOLDERS "USE_SOLUTION_FOLDERS" ON) |
头文件和源文件不分离
1 |
多项目依赖
lib库的CMakeLists文件1
2
3
4
5
6FILE(GLOB allfiles "./src\/*.cpp" "./include\/*.h")
add_library(lib1 ${allfiles})
target_include_directories(lib1 PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
主项目的CmakeLists文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24cmake_minimum_required(VERSION 3.3.0)
set(CMAKE_CXX_STANDARD 11)
project(CMAKELIB VERSION 1.12.7)
set(CMAKELIB_SOVERSION ${CMAKELIB_VERSION})
FILE(GLOB allfiles "./src\/*.cpp" "./include\/*.h")
add_subdirectory(lib1)
list(APPEND EXTRA_LIBS lib1)
list(APPEND EXTRA_INCLUDES "${PROJECT_SOURCE_DIR}/lib1/include")
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)
add_executable(CMAKELIB src/cmakemain.cpp include/cmakemain.h ${allfiles})
target_link_libraries(CMAKELIB PUBLIC ${EXTRA_LIBS})
target_include_directories(CMAKELIB PUBLIC
"${PROJECT_BINARY_DIR}"
${EXTRA_INCLUDES}
)
引用库
筛选器
文件夹遍历
DEBUG和RELEASE
cmake .. -DCMAKE_BUILD_TYPE=Debug