学习参考:6-3 CMake重要指令和变量_哔哩哔哩_bilibili

 

CMake

作用是用于跨平台处理代码,使用CMake去替代g++指令,在项目多文件操作的时候节省很多步骤指令

语法特性

  • 基本语法格式:指令(参数1 参数2 ...)

    • 参数使用括弧括起
    • 参数之间使用空格或者分号隔开
  • 指令是大小写无关,参数和变量是大小写的相关

  • 变量使用 ${} 方式取值,但是在IF控制语句中是直接使用变量名的

 

 

常用重要指令

  • cmake_minimum_required
    • 作用:指定cmake最小版本要求
    • 自行去查看自己cmake版本然后进行设定
    • 语法eg: cmake_minimum_required(VERSION 3.16.3)

  • project
    • 作用:定义工程名称,并且可指定工程支持的语[ 可选 ]
    • 语法eg: project(projectname  [cxx] [c] [java])

  • set
    • 作用:显示定义变量
    • 这个语法不好描述,看看B站博主的图吧

  • include_directories
    • 作用:向工程添加多个特定的库文件搜索路径(相当于指定g++编译器的-I参数)
    • 语法: include_directories([AFTER | BEFORE] [SYSTEM] dir1 dir2 ...)

  • link_directories
    • 作用:向工程添加多个特定的库文件搜索路径(相当于指定g++编码器的-L参数)
    • 语法:link_directories(dir1 dir2 ...)

       看看博主给的示例吧,没有生成静态库,没有调用静态库就懒得搓了

  • add_library
    • 作用:生成库文件
    • 语法:add_library(libname [SHARED | STATIC | MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
      • SHARED:动态库
      • STATIC:静态库
      • source: 源文件

  • add_compile_options
    • 作用:添加编译参数
    • 语法:add_compile_options(<option> ...)

  • add_executable
    • 作用:生成可执行文件
    • 语法:add_executable(exename  source1 source2 ... sourceN)

  • target_link_libraries
    • 作用:为target 添加需要链接的共享库(相当于指定g++编译器-I参数)
    • 语法: target_link_libraries( target library1<debug | optimized> library2...)

       上图展示了使用源码生成库,再使用源码生成可执行文件,再将可执行文件与库链接起来

  • add_subdirectory
    • 作用:向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置
    • 语法:add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

  • aux_source_directory
    • 作用:发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表
    • 语法:aux_source_directory(dir VARIABLE)

 

 

常用变量

  • CMAKE_C_FLAGS gcc编译选项
  • CMAKE_CXX_FLAGS g++编译选项

     

  • CMAKE_BUILD_TYPE   编译类型(Debug,Release)