# CMake

# 指定 CMake 最低版本依赖

cmake_minimum_required(VERSION 3.0)

# 项目名称

project(project_name VERSION v1)

# 生成可执行文件

add_executable(project_name 源文件)

# 构建、编译与运行

> mkdir build
> cmake ..
> make

# 搜索源文件

# 参考博文:

  • [1] CMake Tutorial — Mastering CMake

# cmake 的使用

cmake 是一个项目构建工具,并且是跨平台的。

# CMake 使用 #来进行注释, 使用 #[[]] 来注释一整块代码
  • cmake_minimum_required(VERSION 3.0) :指定最低版本(非必要,推荐)

  • project :定义工程文件名,(可指定工程版本,工程描述、web 主页,支持的语言)

    project()
  • add_executable

    add_executable(可执行程序名 源文件名称)
    # 源文件名称可能是一个个可能是多个,如果有多个可以用空格或;间隔
  • 执行 cmake

    cmake CMakeLists.txt文件所在路径
    make

# 变量

# 使用 set 来定义一个变量
set(var value)
# 使用 ${变量名} 来取变量值
  • 指定使用的 C++ 标准

    • 方法一: CMakeLists.txt 中指定

      set(CMAKE_CXX_STANDARD 11)
      set(CMAKE_CXX_STANDARD 14)
      set(CMAKE_CXX_STANDARD 17)
    • 方法二:执行 cmake 命令值指定

    cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=11
      cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=14
      cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=17
  • 指定输出路径

    set(home /home/robin/linux/sort)
    set(EXECUTABLE_OUTPUT_PATH ${home}/bin)

# 搜索文件

  • aux_source_directory(dir var) :查找某个路径下的所以源文件
  • file(GLOB/GLOB_RECURSE var 要搜索的文件路径和文件类型)
# 两个宏定义
${PROJECT_SOURCE_DIR} 		# CMakeLists.txt 所在的路径
${CMAKE_CURRENT_SOURCE_DIR} # CMakeLists.txt 所在的路径

# 包含头文件

  • include_directories(header_path)

# 制作静态库与动态库

  • 制作静态库: add_libray(库名称 STATIC 源文件1 源文件2 )

  • 制作动态库: add_libray(库文件 SHARED 源文件1 源文件2)

    LIBRARY_OUTPUT_PATH :用于指定生成的动态库 / 静态库的存放路径,动态库也可以使用 EXECUTABLE_OUTPUT_PATH

# 包含库文件(静态库文件与动态库文件)

  • 链接静态库: link_libraries(静态库名称)

    静态库名称可以是全称,例如 libxxx.a ;也可以是掐头去尾之后的名称 xxx

  • 链接动态库: target_link_libraries(目标文件 动态库文件)

如果静态库或动态库不是系统提供的,需要指定静态库 / 动态库的路径;

link_directories(对应的路径)

# 日志

message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] 输出的消息)

消息类型:

  • (无) :重要消息
  • STATUS :主要消息
  • WARNINGCMake 警告
  • AUTHOR_WARNINGCMake 警告
  • SEND_ERRORCMake 错误,跳过生成过程
  • FATAL_ERRORCMake 错误,终止所以处理过程

# 变量操作

# 字符串拼接

  • 使用 set

    set(res ${var1} ${var2})
  • 使用 list

    list(APPEND 变量名 需要追加的字符串)

# 字符串移除

list(REMOVE_ITEM 变量名 移除的元素值)

# 获取列表的长度

# 获取列表内元素个数,而非字符串长度
list(LENGTH 变量名 outputVar)

# 获取列表指定索引值

list(GET 变量名 <element index> ... <output variable>)

索引从 0 开始编号,索引也可以是负数,比如 -1 表示最后一个元素;超过列表长度则会报错

# 指定连接符拼接

list(JOIN 变量名1 变量名2 ... 连接符 <output variable>)

# 查找指定元素


# 在列表指定位置插入元素


# 在列表头部插入元素


# 在列表尾部元素删除


# 移除列表头部元素


# 移除指定索引的元素


# 移除列表中的重复元素


# 列表翻转


# 列表排序


# 宏定义

# 内置宏

  • VERSIONCMake 版本号
  • CMAKE_CXX_STANDARDC++ 标准
  • EXECUTABLE_OUTPUT_PATH :可执行文件的输出路径
Edited on Views times

Give me a cup of [coffee]~( ̄▽ ̄)~*

Value WeChat Pay

WeChat Pay