CMake:相关概念与使用入门(一)

1、Cmake概述
  • Cmake是一个项目构建工具,并且是跨平台的。

  • 关于项目构建我们所熟知的有Makefile,然后通过make命令进行项目的构建,并且大多数是IDE都继承了make,比如:VS的nmake,Linux下的GNU make、Qt的qmake等。

  • 如果自己手动写makefile,会发现makefile通常依赖当前的编译平台,并且makefile的工作量比较大,解决依赖关系也容易出错。

  • 而Cmake恰好能解决上述问题,其允许开发者指定整个过程的编译流程,在根据编译平台,自动生成本地化的Makefile和工程文件,最后用户只需要make编译即可,Cmake是一款用来生成Makefile的构建工具

  • Cmake给我的理解更像是Java语言用于管理项目的Maven和Gradle,但是没有Maven它们有那么强大的功能
    在这里插入图片描述

2、Cmake简单使用
# 这是一个CMakeLists.txt文件

#[[ 这是一个CMakeLists.txt文件
这是一个CMakeLists.txt文件
这是一个CMakeLists.txt文件
]]

# 指定当前项目所需的最低cmake版本
cmake_minimum_required(VERSION 3.10.2)

# 定义工程名字
#project(test_project
#        [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
#        [DESCRIPTION <project-description-string>]
#        [HOMEPAGE_URL <url-string>]
#        [LANGUAGES <language-name>...])
project(test_project)

# 添加生成可执行文件的名称和所需要的依赖(依赖以 或者;分隔开)
#add_executable(main main.cpp)
#add_executable(main main.cpp;sub.cpp;add.cpp;mul.cpp;dived.cpp)
add_executable(main main.cpp sub.cpp add.cpp mul.cpp dived.cpp)
  • Cmake支持大写、小写、混合大小写的命令,如果在编写CMakeLists.txt文件时使用的工具对应的命令提示,那么大小写随缘即可。

  • 注释行:#后面进行写注释

  • 注释块:#后面不能有空格必须紧跟着[[

  • cmake_minimum_required:指定使用的cmake最低版本

  • project:定义工程名称,并可以指定工程的版本、工程描述、web主页地址、支持的语言(默认情况下支持所有语言),如果不需要这些都是可以忽略的,只需要指定出工程名字即可。

  • add_executable:定义工厂会生成一个可执行程序

3、Cmake简单使用
# tree命令
.
├── add.cpp
├── build
├── CMakeLists.txt
├── dived.cpp
├── head.h
├── main.cpp
├── mul.cpp
└── sub.cpp
  • head.h头文件中定义了add、sub、mul、dived四则运算

  • 分别在对应的.cpp文件中进行实现,然后main.cpp是程序的入口

  • CMakeLists.txt就是我们需要编写的文件,编写完毕之后进入build目录进行构建

  • 由于cmake命令会生成大量的一些编译产生的文件,为了防止污染工程通常都会在build文件夹下进行构建

  • 执行流程

    # 进入build文件夹
    cd build
    
    # cmake需要指定CMakeLists.txt文件所在的目录,生成Makefile
    cmake ../	
    
    # 执行make进行编译,生成可执行程序
    make
    
    # 执行可执行程序
    ./main
    
    /* 输出
    a + b = 12
    a - b = 8
    a * b = 20
    a / b = 5
    */
    

相关推荐

  1. C++学习笔记():入门概念的疑问解答

    2024-04-26 00:38:03       25 阅读
  2. 路由相关基本概念(IP入门

    2024-04-26 00:38:03       44 阅读
  3. netty的继续学习(相关概念)

    2024-04-26 00:38:03       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 00:38:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 00:38:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 00:38:03       87 阅读
  4. Python语言-面向对象

    2024-04-26 00:38:03       96 阅读

热门阅读

  1. 蚂蚁 2025届暑期实习 多模态LLM 面经

    2024-04-26 00:38:03       35 阅读
  2. Linux第三章

    2024-04-26 00:38:03       30 阅读
  3. 智能合约语言(eDSL)—— 并行化方案

    2024-04-26 00:38:03       28 阅读
  4. Leetcode 150:逆波兰表达式求值

    2024-04-26 00:38:03       30 阅读
  5. CDN的原理

    2024-04-26 00:38:03       25 阅读