CMake 是一个构建工程的工具
sudo apt install cmake
$ # 创建构建目录
$ mkdir -p build
$ cd build
$
$ # 设置安装前缀
$ cmake -DCMAKE_INSTALL_PREFIX=/usr ..
$
$ # 生成 MakeFile
$ make
$
$ # 测试
$ make test
$
$ # 安装
$ make install
CMake 命令不区分大小写,以下说明均用小写字母
## 指定 CMake 的最小版本
cmake_minimum_required(VERSION min-version)
## 指定项目名称
project(project-name)
## 向用户输出提示信息
message(STATUS "message to display")
## 向用户输出错误信息,构建直接停止
message(FATAL_ERROR "message to display")
## 添加子目录
add_subdirectory(source-dir)
## 添加头文件的搜索目录
include_directories(include-dir)
## 添加动态库的搜索目录
link_directories(library-dir)
## 构建二进制文件
add_executable(executable-name source.cc)
## 对二进制文件添加链接的库文件
target_link_libraries(executable-name library-name)
## 设置二进制文件的输出目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
## 构建动态库
add_library(library-name SHARED source.cc)
## 设置动态库的输出目录
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
## 构建静态库
add_library(library-name STATIC source.cc)
## 设置静态库的输出目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
## 同时构建动态库和静态库
add_library(library-name-shared SHARED source.cc)
add_library(library-name-static STATIC source.cc)
set_target_properties(library-name-shared PROPERTIES
OUTPUT_NAME library-name) # 设置库文件的输出名字
set_target_properties(library-name-static PROPERTIES
OUTPUT_NAME library-name) # 设置库文件的输出名字
## 设置动态库的版本
set_target_properties(library-name-shared PROPERTIES
VERSION 1.2 # 设置动态库的版本
SOVERSION 1) # 设置 API 版本
## 设置需要安装的文件
install(TARGETS executable-name library-name-shared library-name-static
RUNTIME DESTINATION bin # 设置二进制文件的安装目录
LIBRARY DESTINATION lib # 设置动态库的安装目录
ARCHIVE DESTINATION lib) # 设置静态库的安装目录
install(FILES hearder-name.h DESTINATION include) # 设置普通文件的安装目录
## 激活测试命令
enable_testing()
## 添加测试程序
add_test(test-name executable-name arg)
## 设置变量的值,如果有多个值,将以分号分割
## 例如:如果设置 set(var a b c),${var} 的值将为:"a;b;c"
set(variable-name value)
CMake 变量区分大小写
## 项目名称
CMAKE_PROJECT_NAME
## 项目的源目录
CMKAE_SOURCE_DIR
## 项目的构建目录
CMKAE_BINARY_DIR
## 安装目录前缀
CMAKE_INSTALL_PREFIX
## C++ 编译选项
CMAKE_CXX_FLAGS
## 判断变量是否定义
if(val)
cmmand()
endif(val)
## 判断变量是否未定义
if(not val)
cmmand()
endif(not val)
原文:https://www.cnblogs.com/liuyunbin/p/11549758.html