cmake入门

什么是cmake

当编译源文件多的时候使用makefile脚本来自动编译程序,但当源文件特别多的时候,手写makefile 同样是很难的事情,于是有了cmake ,他通过cmakelist.txt 文件管理项目文件。使用cmake . 命令可以使项目生成特定平台的makefile 。
编译流程:

  1. 编写CMake 配置文件 CMakeLists.txt
  2. 执行命令 cmake PATH 生成 Makefile 。其中 PATH 是CMakeLists.txt 的目录
  3. 使用 make 命令进行编译
  4. 额外的 sudo make install 命令可以对编译的头文件和库文件安装进系统

基本格式

# cmake版本声明要求
CMAKE_MINIMUM_REQUIRED(VERSION 3.15)

# 指定项目名
PROJECT(my_lib_test)

# 指定语言要求,以下命令为c++ 11
SET(CMAKE_CXX_STANDARD 11)

# 指定生成二进制文件名称及源文件
ADD_EXECUTABLE(test main.cpp)

# 指定生成静态链接库名称及源文件,该语句与上一语句通常不在一个文件中
ADD_LIBRARY(mathfunc math.cpp)

进阶命令

补充知识:

  1. 静态库:程序编译阶段就被拷贝到目标文件中,执行时不在需要原始的静态库文件。后缀 .a .lib
  2. 动态库: 程序运行阶段才会调用系统中的动态库。后缀 .so .dll
# 添加头文件目录,相当与g++ 选项中的 -I (大写i),可连续添加多个,用空格隔开
include_directories(../fmt/include   ../math/include)

# 添加要链接的动/静态库文件搜索目录,相当于g++ 选项中的 -L,可连续添加多个,用空格隔开
link_directories("/opt/MATLAB/R2012a/bin/glnxa64")

# 添加要链接的库文件,可连续添加多个,用空格隔开
link_libraries("/home/kk/dd/lib/libfmt.a")  # 全路径添加库文件

# 在当前库文件搜索目录搜索并添加库文件,相当于g++ 中的选项 -l (小写L) 
target_link_libraries(test fmt)    # test 为目标文件,fmt 全名为 libfmt.a /libfmt.so
target_link_libraries(test libfmt.a)  # 可指定添加静态库

# 查找当前目录下的所有源文件,并将名称全部保存到DIR_SRCS 变量
#此时,就可以用 ${DIR_SRCS} 来代替多个源文件名称了
aux_source_directory( . DIR_SRCS)

# 添加子目录,子目录文件中也会包含 cmakelists.txt 文件,其会执行子目录的cmake命令
add_subdirectory(math)

高级命令

# 在cmake 的add_library,add_executable和add_subdirectory等命令有一个EXCLUDE_FROM_ALL参数。根据cmake官网的解释这个参数的作用就是:如果某个target或subdirectory被设置为EXCLUDE_FROM_ALL属性,那么这个target(或这个subdirectory中的所有target)就会被排除在all target列表之外,这样当执行默认的make(或nmake)时,这个target(或这个subdirectory中的所有target)就不会被编译。
add_subdirectory(fmt exclude_from_all)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值