CMake 入门教程

本教程的测试环境

  • Ubuntu 18.04 LTS
  • CMake 3.10.2

什么是 CMake?

CMake 是一个构建工程的工具

如何安装 CMake?

sudo apt install cmake

如何使用 CMake?

  1. 在指定目录下写 CMakeLists.txt,文件名区分大小写
  2. 内部编译会导致文件结构混乱,因此推荐外部构建
$ # 创建构建目录
$ mkdir -p build
$ cd build
$
$ # 设置安装前缀
$ cmake -DCMAKE_INSTALL_PREFIX=/usr  ..
$
$ # 生成 MakeFile
$ make
$
$ # 测试
$ make test
$
$ # 安装
$ make install

CMake 常用命令

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 变量区分大小写

## 项目名称
CMAKE_PROJECT_NAME

## 项目的源目录
CMKAE_SOURCE_DIR

## 项目的构建目录
CMKAE_BINARY_DIR

## 安装目录前缀
CMAKE_INSTALL_PREFIX 

## C++ 编译选项
CMAKE_CXX_FLAGS

CMake 常用控制指令

## 判断变量是否定义
if(val)
   cmmand()
endif(val)

## 判断变量是否未定义
if(not val)
   cmmand()
endif(not val)

参考资源

猜你喜欢

转载自www.cnblogs.com/liuyunbin/p/11549758.html