[C++][CMake][CMake基础]详细讲解

目录

1.CMake简介

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

  • 问题 -- 解决

    • 如果自己动手写Makefile,会发现,Makefile通常依赖于当前的编译平台,而且编写Makefile的工作量比较大,解决依赖关系时也容易出错
    • 而CMake恰好能解决上述问题, 其允许开发者指定整个工程的编译流程,再根据编译平台,自动生成本地化的Makefile和工程文件 ,最后用户只需make编译即可
  • 可以把CMake看成一款自动生成Makefile的工具 ,其编译流程如下图

  • CMake优点总结:

    • 跨平台
    • 能够管理大型项目
    • 简化编译构建过程和编译过程
    • 可扩展:可以为CMake编写特定功能的模块,扩充CMake功能

2.大小写?

  • CMake支持大写、小写、混合大小写的命令
  • 如果在编写CMakeLists.txt文件时使用的工具有对应的命令提示,那么大小写随缘即可,不用太过在意

3.注释

1.注释行

  • CMake使用#进行行注释 ,可以放在任何位置

    cmake 复制代码
    # 这是一个CMakeLists.txt文件

2.注释块

  • CMake使用#[[]]进行块注释

    cmake 复制代码
    #[[这是一个CMakeLists.txt文件
    Die
    SnowK]]

4.日志

  • 在CMake中可以用命令显示一条消息,该命令的名字为message

  • 语法 :

    cmake 复制代码
    message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...)
  • 状态参数 :

    • (无):重要消息
    • STATUS:非重要消息
    • WARNING:CMake警告,会继续执行
    • AUTHOR_WARNING:CMake警告(dev),会继续执行
    • SEND_ERROR:CMake错误,继续执行,但是会跳过生成的步骤
    • FATAL_ERROR:CMake错误,终止所有处理过程
  • 显示区域

    • CMake的命令行工具会在stdout上显示STATUS消息,在stderr上显示其他所有消息
    • CMake的GUI会在它的log区域显示所有消息
  • CMake警告和错误消息的文本显示使用的是一种简单的标记语言

    • 文本没有缩进
    • 超过长度的行会回卷
    • 段落之间以新行做为分隔符
  • 示例

    cmake 复制代码
    # 输出一般日志信息
    message(STATUS "source path: ${PROJECT_SOURCE_DIR}")
    # 输出警告信息
    message(WARNING "source path: ${PROJECT_SOURCE_DIR}")
    # 输出错误信息
    message(FATAL_ERROR "source path: ${PROJECT_SOURCE_DIR}")

相关推荐
yuniko-n几秒前
【Java】字符串相关坑点
java·开发语言·python
jimy127 分钟前
虚函数vtable,链接时看到构造函数,linker把符号地址写入vtable(三)
开发语言·c++
ss27331 分钟前
AI全栈实战 | 3.3-02 Python 并发:有 GIL 为什么还用多线程,asyncio 和 JS 事件循环同源不同味
开发语言·javascript·python
菜鸟~noob23335 分钟前
【电子战】第20篇:凸优化与对数障碍法【含matlab代码】
开发语言·matlab
Wang's Blog43 分钟前
Java框架 SpringCloud 快速入门: 服务拆分案例 Demo
java·开发语言·spring cloud
小小龙学IT1 小时前
Python SQLAlchemy 2.0 深度解析:从 Core 到 ORM 的数据访问双引擎
开发语言·数据库·python
2601_962885721 小时前
如何用 Python 计算 ROC 变动率指标做动量分析?
开发语言·python·算法
潼心1412o1 小时前
C++初阶(长期更新)第9讲:string(上)
开发语言·c++
朝朝辞暮i2 小时前
C++ 第 39 章: 阶段性总复习——类、对象、构造、继承、this、指针与智能指针
开发语言·c++·算法·ros2
wuminyu2 小时前
Virtual Thread重投递至ForkJoinPool任务队列过程解析
java·linux·c语言·jvm·c++