Cmake学习笔记

本文只用于本人学习记录,编写逻辑可能不是很清楚,不适合初学者阅读学习。

1. Cmake简介

  1. 目的:自动生成Makefile文件,进而编译工程
  2. 优势:跨平台,语言友好易懂,可编写性强

2. Linux下使用步骤

  1. 编写 CMake 配置文件 CMakeLists.txt 。
  2. 执行命令 cmake PATH 或者 ccmake PATH,生成Makefile文件。
  3. 执行命令make,进行编译。

经典的使用方法是:
在工程主目录下建立一个build文件,在build文件里执行命令cmake ..,这样产生的所有中间文件都会存在build文件里,不会污染工程文件空间。

3. 编写实战

1)cmake有很多预配变量,以下总结一些经常用到的:
PROJECT_BINARY_DIR        #执行cmake的位置,例如2中所说的build目录
PROJECT_SOURCE_DIR        #CMakeLists.txt存放的位置
EXECUTABLE_OUTPUT_PATH    #生成可执行文件的存放目录
LIBRARY_OUTPUT_PATH       #生成依赖包的存放目录
CMAKE_CXX_STANDARD        #C++标准,例如c++14则把其set为14即可,等价于-std=c++14
CMAKE_CXX_FLAGS           #G++编译选项,对应Makefile里的CFLAGS
2)常用命令
cmake_minimum_required (VERSION <version>)   #cmake运行环境的最低要求
project (<project_name>)                     #声明项目名称
set(<variable> <value>)                      #经常使用的命令,等价于C++的#define
execute_process (COMMAND <command>)          #执行shell命令
add_definitions(-DFOO=<definition>)          #等价于G++的-D编译选项
message ([STATUS] "<message>")               #打印message,STATUS选项会多打印---提示
include_directories ([dir1] [dir2])          #头文件目录
link_directories ([dir1] [dir2])             #链接的库文件的目录
aux_source_directory (<dir> <var>)           #寻找dir目录下的所有c++/c源文件,并存放在var变量中
find_program (<var> prog_name [DOC "<doc>"]) #寻找可执行程序,并赋给变量var,DOC可以打提示语句
find_file (<var> file_name [DOC "<doc>"])    #寻找文件,并赋给变量var,DOC可以打提示语句
option ((<var> ["tips"] [ON | OFF])          #给var赋值true/false,有初始值。
                                             #可在ccmake中开启或cmake时添加选项
add_library (<name>                          #生成链接库文件
    [STATIC | SHARED | MODULE] <SRC>) 
add_subdirectory (<dir> <lib_dir>)           #添加子目录,该目录下也必须有CMakeLists.txt,同时也可以指定执行cmake的目录
add_executable (<exe_name> <SRC>)            #用SRC编译生成可执行文件name,
target_link_libraries (<exe_name> <LIB>)     #链接依赖库
----条件语句命令----
if (expression)
  # then section.
elseif (expression2)
  # elseif section.
else(expression)         #此处expression可以省略
  # else section.
endif(expression)        #此处expression可以省略
----文件搜索命令----                 #file命令有很多用法,这里只记录我用到的两个
file (GLOB <var> <path>)            #寻找当前目录下的所有包含某些特征的文件
file (GLOB_RECURSE <var> <path>)    #递归寻找当前目录下的所有包含某些特征的文件
例如:
file (GLOB ALL_SRC                  #寻找src目录的全部以cpp为后缀的文件
    ${PROJECT_SOURCE_DIR}/src/*.cpp
    ) 
3)常见编写过程实例

1.初始化

cmake_minimum_required (VERSION xx)             #指定cmake运行环境的最低版本
project (xx)                                    #声明工程名字
set (EXECUTABLE_OUTPUT_PATH path)               #指定生成可执行文件目录
set (LIBRARY_OUTPUT_PATH path)                  #指定生成lib依赖库目录
set (CMAKE_CXX_STANDARD 14)                     #指定C++版本
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")  #添加G++编译选项

2.搜寻源文件

set (ALL_SRC path1/a.cpp path2/b.cpp) #明确指定源文件
aux_source_directory (path ALL_SRC)   #搜索path目录下的源文件
file (GLOB ALL_SRC path/*.cpp)        #搜索path目录下的.cpp文件

3.指定头文件目录及依赖库目录

include_directories (path1 path2)     #指定头文件目录
link_directories (path1 path2)        #指定依赖库目录

4.生成目标文件

set (EXECUTABLE XXX)                       #命名目标文件为xxx
add_executable (${EXECUTABLE} ${ALL_SRC})  #生成目标文件

5.链接

arget_link_libraries (${EXECUTABLE} ${EXTRA_LIBS})
#链接依赖库,注意所有依赖库必须在link_directories的目录下

5.运行

mkdir build  #创建build目录
cd build     #打开build目录
cmake ..     #执行cmake,生成Makefile
make -j8     #执行Makefile进行编译,-j8表示8核并行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值