makefile和CMakeLists/C++包管理器

make

  • 大家可能会很奇怪,都什么年代了,还学makefile,cmake都有些过时了,为什么还要再学这个呢?

  • 我是这么看待这个问题的,cmake跨平台性还是很有有优势的,有着多年积累的底蕴,借助大模型可以很好的利用这个工具。而cmake的原理就是自动生成makefile,所以还是很值得学习makefile,了解历史的。

  • makefile和CMakeLists

    • 当只是编写一个文件的代码时,直接使用命令运行很方便。但是一但项目复杂起来后,就会难以管理,这个时候使用自动化构建工具就会十分方便,常用的构建工具有make和Cmake。make通过makefile对项目进行管理。Cmake通过配置生成适应各操作系统版本的makefile文件有着很好的跨平台性。

一、makefile

  1. 简单的编译运行命令(g++为例C++,g++会自动连接依赖库,适用于C++)

    g++ <依赖文件> -o <目标文件>

  2. makefile的规则

    <目标文件> : <依赖文件>

    <要执行的命令>

    hello: main.c message.cgcc main.c message.c -o hello
    
  3. makefile特征

    1. makefile的扩展名是.mk,但是创建的时候直接忽略就好

    2. 执行的命令前面必须是tab键

    3. 实际情况应该是先编译后再链接,推荐此种写法

      在这里插入图片描述

    4. 伪目标:不生成目标文件的目标,只是一个标签,最常用的就是clean和all,clean常用来产生的临时文件

      在这里插入图片描述

      • 伪目标注意:

        1. 不要和文件名重复,因为伪目标运行的时候是make <伪目标>这样的格式,而也有这种类型的命令make <file>来指定目标的生成,所以如果伪目标和文件名重复,则会冲突

        2. 解决方案,在开头加上.PHONY: <伪目标>,来显示告诉编译器,这就是个伪目标

          在这里插入图片描述

        3. 当需要同时执行多个可执行文件的生成的时候就可以使用all伪目标,格式伪all: <目标文件> <目标文件>,当然把all放在除.PHONY: <伪目标>之后,make直接执行默认也是为目标所指定的所有目标文件

          在这里插入图片描述
          在这里插入图片描述

      1. 同一种规则和依赖文件的简化写法

        在这里插入图片描述

      2. 禁止执行的命令行输出打印在终端上

        在这里插入图片描述
        在这里插入图片描述

        在对应命令加上@就好

      3. 使用变量,常常讲一些命令行参数以及源文件、目标文件、编译文件使用变量定义
        在这里插入图片描述

        1. 特殊符号,常说$<其它特殊符号组成>

          $@代表目标文件

          $<代表第一个依赖文件

          $^代表所有依赖文件

          在这里插入图片描述

        2. 通配符:所有的cpp文件和o文件

          在这里插入图片描述

        3. 更多的分支循环

  4. make

    1. make是按照时间戳来判断是否更新目标文件的,若时间戳不变则无法改变,下图为windows系统,与mac和linux有些许差异

      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    2. 如何运行伪目标

      make <伪目标>在这里插入图片描述

    3. 参数

      1. -f参数指定makefile的文件,可以修改makefile的名称,使用的时候加上-f指向修改好的文件就好

      2. -n参数打印出要执行的命令,但不会执行,常用来用来调试

      3. -C参数调用子模块的makefile

        在这里插入图片描述

二、cmake中的CMakeLists

  1. 基本写法

    cmake_mininum_required(VERSION 3.10)//最小版本指定
    project(HelloWorld)//项目名字
    set(Source main.c)//定义变量
    add_executable(hello ${Source})
    //`<目标文件> : <依赖文件>`
    //	`<要执行的命令>`
    
  2. 优势:

    1. 跨平台性、跨编译器
  3. 其它功能:指定编译选项、链接库、生成静态库、动态库等等

  • 大家应该会很奇怪,前面都说cmake好了,要学习,为什么就讲了这么点内容,我觉得学习这些基础的框架就够了,其它的依靠大模型的帮助会更有性价比。这里可能大家觉得我有些双标,我觉得工具的魅力是它的底蕴,是需要了解它,但是真正用到实际的时候,还是好的漂亮的代码最棒。大模型的代码比大部分写的代码都要合理,因为其训练数据种包含着拥有无数高质量代码的github。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/436242.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDE 使用技巧与插件推荐全面指南

目录 目录 常用IDE概述 Visual Studio Visual Studio Code IntelliJ IDEA PyCharm Eclipse IDE 使用技巧 通用技巧 Visual Studio 专属技巧 Visual Studio Code 专属技巧 IntelliJ IDEA 专属技巧 插件推荐 Visual Studio 插件 Visual Studio Code 插件 IntelliJ…

STM32 实现 UDP 广播通信

目录 一、引言 二、准备工作 1.硬件准备 2.软件准备 三、LWIP 协议栈的配置与初始化 1.添加 LWIP 源文件 2.配置 LWIP 3.初始化 LWIP 四.创建 UDP 广播套接字 1.创建 UDP 控制块 2.绑定本地端口 五、设置 UDP 广播选项 1.设置广播地址 2.设置广播选项 六、发…

防反接电路设计

方案1 串联二极管&#xff0c; 优点&#xff1a;成本低、设计简单 缺点&#xff1a;损耗大&#xff0c;P ui 方案2 串联自恢复保险丝 当电源反接的时候&#xff0c;D4导通&#xff0c;F2超过跳闸带你留&#xff0c;就会断开&#xff0c;从而保护了后级电路 方案3 H桥电路…

[数据集][目标检测]电力场景防震锤缺陷检测数据集VOC+YOLO格式705张1类别

重要说明&#xff1a;防震锤缺陷图片太难找&#xff0c;数据集里面存在大量单一场景图片&#xff0c;请仔细查看图片预览谨慎下载&#xff0c;此外数据集均为小目标检测&#xff0c;如果训练map偏低属于正常现象 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径…

COMP 6714-Info Retrieval and Web Search笔记week2

tokenizer&#xff1a;分词器 右半部分&#xff1a;倒排索引 Westlaw AND&#xff08;&&#xff09;&#xff1a; 要搜索必须同时出现在文档中的两个或多个词语&#xff0c;请使用 AND&#xff08;&&#xff09;。例如&#xff0c;输入 narcotics & warrant&#x…

net core mvc 数据绑定 《2》 bind fromquery,FromRoute,fromform等,自定义模型绑定器

mvc core 模型绑定 控制绑定名称 》》》Bind 属性可以用来指定 模型应该 绑定的前缀 public class MyController : Controller {[HttpPost]public ActionResult Create([Bind(Prefix "MyModel")] Ilist<MyModel> model){// 模型绑定将尝试从请求的表单数据中…

(二)大模型调用

一、基本概念 1.1、Prompt 大模型的所有输入&#xff0c;即&#xff0c;我们每一次访问大模型的输入为一个 Prompt&#xff0c; 而大模型给我们的返回结果则被称为 Completion。 1.2、Temperature LLM 生成是具有随机性的&#xff0c;在模型的顶层通过选取不同预测概率的预测结…

白内障分类数据集 3.4G

用于白内障检测的白内障和正常眼睛图像分类数据集。 名称 白内障分类数据集 规模 数据量&#xff1a;3.4GB图像数量&#xff1a;未明确提供&#xff0c;但通常这类数据集包含数千张图像。 类别 正常眼&#xff1a;无白内障的眼睛早期白内障&#xff1a;轻度白内障的眼睛中…

DC00024基于ssm实验室预约管理系统java web项目web教师预约jsp预约管理系统

1、项目功能演示 DC00024基于web实验室预约管理系统ssm教室预约实验室预约管理系统java web项目MySQL 2、项目功能描述 基于ssm实验室预约管理系统分为用户和系统管理员两个角色。 2.1 系统管理员 1、系统登录 2、用户管理&#xff1a;修改个人信息、修改个人密码、教师管理…

MySql Explain优化命令使用

MySql Explain优化命令使用 truncate table student // 自增id 从 0 开始 delete from student // 自增id 会保留 &#xff0c; 108 区别&#xff1a; 1&#xff1a;自增id 2&#xff1a;delete 可以恢复 truncate 无法恢复 前言 EXPLAIN 是一个用于获取 SQL 语句执行计划的…

nacos client 本地缓存问题

问题&#xff1a; nacos 更新了配置文件&#xff0c;更新了以后重新启动还是旧的配置信息。 NACOS版本&#xff1a; 1.1.4 解决&#xff1a; 配置缓存 Nacos Client 会将从 Nacos 服务器获取的配置信息缓存在本地。这样&#xff0c;即使 Nacos 服务器不可用&#xff0c;客…

Spring IoC笔记

目录 1.什么是 IoC&#xff1f; 2.IoC类注解&#xff08;五大注解&#xff09; 2.1那为什么要这么多类注解&#xff1f; 2.2五大注解是不是可以混用&#xff1f; 2.3程序被spring管理的条件是&#xff1f; 3.bean对象 3.1Bean 命名约定 3.2获取bean对象 4.⽅法注解 B…

汽车总线之----J1939总线

instruction SAE J1939 是由美国汽车工程协会制定的一种总线通信协议标准&#xff0c;广泛应用于商用车&#xff0c;船舶&#xff0c;农林机械领域中&#xff0c;J1939协议是基于CAN的高层协议&#xff0c;我们来看一下两者之间的关系。在J1939 中&#xff0c;物理层和数据链路…

如何在iPad上用Chrome实现无痕浏览

在数字化时代&#xff0c;隐私保护已成为我们日常生活中不可忽视的一部分。特别是在使用移动设备浏览网页时&#xff0c;如何确保个人信息的安全显得尤为重要。本文将详细介绍如何在iPad上使用Chrome浏览器实现无痕浏览&#xff0c;以保护您的在线隐私。 &#xff08;本文由ht…

electron教程(三)窗口设置

在main.js文件中&#xff0c;创建窗口时会设置窗口的大小&#xff0c;其实还有很多其他属性&#xff0c;可以根据实际需求选择设置&#xff0c;但部分属性存在局限性&#xff0c;官网也有明确告知&#xff1a;自定义窗口 | Electron (electronjs.org) 项目文件目录如下&#x…

VisualGLM-6B——原理与部署

VisualGLM-6B技术原理介绍 VisualGLM-6B 是一种多模态预训练模型&#xff0c;它旨在将视觉和语言模型进行结合&#xff0c;使得语言模型能够理解图像信息并与文本对话无缝结合。为了更好地理解 VisualGLM-6B 的内容&#xff0c;我们可以从以下几个方面来解析它的原理、结构、训…

内存占用估算方法

优质博文&#xff1a;IT-BLOG-CN 通过掌握每种数据类型的大小&#xff0c;就可以更准确地预测对象和数据的内存消耗。 一、基础数据类型 Java基础数据类型结构&#xff0c;在64位系统开启指针压缩情况下的内存占用字节数&#xff1a; booleanbytecharshortintlongfloatdoub…

linux下sudo执行的程序会有一个额外的进程的问题

当我们执行一个可执行文件时&#xff0c;有可能需要一些更高的权限&#xff0c;为此我们会用sudo ./test的方法执行&#xff0c;这时候我们通过ps aux | grep ./test去查看进程&#xff0c;会发现多出来一个 sudo ./test 的进程&#xff0c;该进程被杀死后&#xff0c;发现目标…

等保测评:企业数字安全的坚实盾牌

1.1 企业数字化转型的浪潮 在当今时代&#xff0c;企业数字化转型的浪潮正以前所未有的速度席卷全球&#xff0c;据IDC预测&#xff0c;到2023年&#xff0c;全球数字化转型支出将达到惊人的2.3万亿美元。这一趋势不仅重塑了企业的运营模式&#xff0c;更对企业的信息安全提出…

Mac通过ssh连接工具远程登录服务器( Royal TSX安装及使用)

一、Royal TSX软件下载地址 Royal Apps 二、Royal TSX 汉化 汉化包地址&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 三、基础配置 Royal TSX 是一款基于插件的应用&#xff0c;刚安装时还不具备使用条件&#xff0c;需要进行一些基础配置 1 安装基础插件…