CMake

2021-03-14  本文已影响0人  再凌

Cmake是一种工具, 通过读取CMakeList.txt来定制项目的编译流程, 从而生成特定平台相关的MakeFile(Linux)或Visual Studio工程(windows)

中文教程可以看hahack(本文参考的是这一篇)或者xierh

英文教程可以看CMake官网教程

CMakeList语法中不区分大小写, 使用空格区分不同的参数

基础

cmake_minimum_required(VERSION 3.10)

# set the project name
project(Tutorial1)

# add the executable
add_executable(Tutorial tutorial.cxx)

所有的cmake最少拥有以上三行.
第一行是指定了cmake的最低版本, 第二行是项目名称称谓Tutorial1, 第三行是执行构建, 可执行文件名为Tutorial

启用C++11

使用set向Cmake定义两个宏CMAKE_CXX_STANDARD 和CMAKE_CXX_STANDARD_REQUIRED

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

开始编译

在其他某一个目录下执行cmake directory,就可以在自定义的目录开始构建项目源文件, 这叫做项目的外部构建

同级目录多个源文件的编译

当然可以选择把所有的原文件件写进add_executable()中, 也可以选择使用aux_sourcedirectory(<dir> <variable>)命令, 该命令会把指定的目录下所以源文件加入到一个变量名称中. 变量名称的使用和Linux类似, dollar符+大括号

多级目录, 多个源文件

需要在子目录中也放置一个CMakeList.txt, 如果这个子目录要编译成静态库, 则用add_library(静态库名称 编译的文件)代替add_executable

父目录中使用
add_subdirectory(子目录名称)
target_link_libraries(本项目名称, 使用的静态库的名称)

自定义编译规则

可以设置条件编译的宏定义

option(变量名称 描述 默认值ON/OFF)定义一个选项
if(选项值) endif(选项值)来条件编译
configure_file("文件名称" "文件名称") 通过.in文件生成.h文件

.in文件怎么写? #cmakedefine xxxx

其他参数

修改内置的变量就可

set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

其他功能如在Cmake中设置项目版本号, 平台预检查或者生成安装包等可在用时再查

上一篇 下一篇

猜你喜欢

热点阅读