Linux的开发工具(二):编译器gcc/g++与Linux项目自动化构建工具-Makefile

Linux的编译器-gcc/g++

基本概念:gcc是专门用来编译c语言的,g++可以编译c++或c语言

问题一:gcc有时候为什么不能编译带有for循环的c语言源文件?

答:gcc版本过低会不支持for循环等c99标准下的内容

解决方式:gcc 源文件名 -std=c99-std=c99是为了让gcc支持c99中的语法)

此外,gcc还可以指定编译生成的可执行程序文件名:gcc -o 自定义名称 源文件 -std=c99 

问题二:gcc中c++源文件的后缀是什么?

答:.cc、.cpp、.cxx,不能

问题三:gcc能编译c++的源文件文件吗? 

答:不能,c++的源文件只能由g++来编译

指令:g++ -o my.exe test.cc -std=c++11

此外,g++也支持编译c语言的源文件,所以:g++ -o my.exe test.c -std=c99

问题四:如何查看自己是否拥有g++?如何安装g++?

答:g++ --version查看g++版本,sudo yum install -y gcc-g++指令进行g++的安装

再次理解程序的翻译过程

过程

gcc命令

说明
预处理gcc -E test.c -o test.i宏替换、去注释、头文件展开、条件编译
编译gcc -S test.i -o test.s将源代码翻译成汇编语言
汇编gcc -c test.s -o test.o汇编语言变为机器码,生成目标文件
链接gcc  test.c -o my.exe

目标文件和库函数结合,生成形成可执行程序

  • -E:从现在开始进行程序的翻译,预处理完成就停下
  • -S:从现在开始进行程序的编译,编译完成就停下
  • -c:从现在开始进行程序的翻译,汇编完成就停下

1、gcc -E test.c -o test.i:将源文件预处理后的结果放入test.i文件

2、gcc -S test.i -o test.s:将test.i文件编译后的结果放入test.s文件

3、gcc -c test.s -o test.o:将汇编语言转换为机器码,然后放入test.o文件

动态链接和静态链接

基本概念:两种不同的链接方式,用于将程序中使用的函数库与程序本身结合起来

动态链接:

  • 特点:告诉了程序目标库的地址,使用该库中的内容时回去该库中调用
  • 优点节省资源
  • 缺点多个程序共享动态库,一旦动态库缺失,所有动态链接这个库的程序都无法执行了

静态链接:

  • 特点:在编译时就把库中的方法拷贝到程序中,之后就不再与库产生任何联系了
  • 优点浪费资源
  • 缺点一旦形成与库无关

在Linux系统中,.so 文件是动态链接库 .a 文件是静态库,且默认情况下linux不会安装静态库

Linux项目自动化构建工具-Makefile

主要组成部分:依赖关系 + 依赖方法

注意事项:

1、make是指令、makefile是文件,它还可以写成Makefile

2、默认情况下,make指令会从上至下读取目标文件,并优先生成第一个目标文件

3、目标文件:后的内容是一个文件列表,文件列表可以为空,如果列表中的多文件会以test1.c test2.c test3.c一个文件隔一个空格的方式存放

4、程序会根据依赖关系执行依赖方法

5、.PHONY:xxx,xxx对应的方法总是要被执行的

6、依赖方法前总要有一个tab留出空间

7、mekefile/make会自动根据文件中的依赖关系,进行自动推导,帮助我们执行所有相关的依赖方法

常见功能:

1、将test.c编译成mytest:

 2、清除编译后的无用文件:

问题一:为什么makefile对最新的可执行程序,默认不重新形成?

答:提高编译效率

问题二:如何做到问题一?

答:

问题三:makefile怎么知道我的程序要被编译了?

答:对比,可执行文件的最新修改时间和源文件的最近修改时间,谁更新?

~over~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

手搓 Docker Image Creator(DIC)工具(02):预备知识

此节主要简单介绍一下 Docker、Dockerfile 的基本概念,Dockerfile 对的基本语法,Windows 和 macOS 下 Docker 桌面的安装,Docker 镜像的创建和运行测试等。 1 关于 Docker Docker 是一个开源的应用容器引擎,它允许开发者打包应用…

Open3D(C++) 基于随机抽样与特征值法的点云平面稳健拟合方法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 1、论文概述 针对点云数据含有异常值且传统拟合方法拟合结果不理想的情…

《自动机理论、语言和计算导论》阅读笔记:p115-p138

《自动机理论、语言和计算导论》学习第 6 天,p115-p138 总结,总计 24 页。 一、技术总结 1.associativity and comutativity (1)commutativity(交换性): Commutativity is the property of an operator that says we can switch the order of its ope…

Acwing-3418 杨辉三角形

关于杨辉三角形的一些规律(更详细地去看参考): 下面这些图都来自其他人所做图片 因为杨辉三角形是对称的,并且与二项式有关: 将左半部分(左半部分的编号肯定比右半部分小,不考虑右半部分)一个斜…

如何区分相对路径 与 绝对路径?

在网页中有很多需要使用我们URL路径的场景,包括a标签的href、link标签的href、script标签的src、imag标签的src、form中的action、ajax请求的url等等等等。它们都可以使用相对路径和绝对路径来引入文件,那么,我们如何区分相对路径与绝对路径呢…

MATLAB | 绘图复刻(十六) | 弦图2.1.0版本更新——弦末端弧形块颜色单独设置

Hey, 本人自主开发的弦图绘制工具迎来2.1.0版本了:起因是有粉丝问我前两天发布的文章中这张图咋画: 我本来一想我开发的工具画弦图还是很简单的哇(下面文章中有基本用法) https://slandarer.blog.csdn.net/article/details/126458…

Vue tree自定义滚动条位置

贴一张效果图,我的效果不方便贴出来 实现支持: 1、懒加载 2、普通加载 下面贴关键思想: document有一个获取element元素的方法。 let element document.getElementById(tree); let arr document.querySelectorAll(".nodelModel&quo…

编曲知识15:重复段落编写 尾奏编写 家庭工作室搭建 硬件设备使用常识

15 重复段落编写 尾奏编写 家庭工作室搭建 硬件设备使用常识小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_6602a586e4b0694cc051476b?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 重复段落设计 第二段落指代间奏过后的段落 第二…

uniapp 小程序发布体验版 http://198.18.0.1:7001 不在以下 request 合法域名列表中(踩坑记录二)

问题一: 小程序发布体验版时出现报错信息: http://198.18.0.1:7001 不在以下 request 合法域名列表中无法连接uniCloud本地调试服务,请检查当前客户端是否与主机在同一局域网下 解决方案: 请务必在HBuilderX内使用【发行】菜单打…

上位机图像处理和嵌入式模块部署(qmacvisual寻找圆和寻找直线)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面有几篇文章,我们谈到过直线拟合、圆拟合和椭圆拟合。当时,我们的做法是,先找到了轮廓,接着找到…

C++多线程:单例模式与共享数据安全(七)

1、单例设计模式 单例设计模式,使用的频率比较高,整个项目中某个特殊的类对象只能创建一个 并且该类只对外暴露一个public方法用来获得这个对象。 单例设计模式又分懒汉式和饿汉式,同时对于懒汉式在多线程并发的情况下存在线程安全问题 饿汉…

稀碎从零算法笔记Day35-LeetCode:字典序的第K小数字

要考虑完结《稀碎从零》系列了哈哈哈 这道题和【LC.42 接雨水】,我愿称之为【笔试界的颜良&文丑】 题型:字典树、前缀获取、数组、树的先序遍历 链接:440. 字典序的第K小数字 - 力扣(LeetCode) 来源&#xff1…

el-upload上传图片图片、el-load默认图片重新上传、el-upload初始化图片、el-upload编辑时回显图片

问题 我用el-upload上传图片,再上一篇文章已经解决了,el-upload上传图片给SpringBoot后端,但是又发现了新的问题,果然bug是一个个的冒出来的。新的问题是el-upload编辑时回显图片的保存。 问题描述:回显图片需要将默认的 file-lis…

从0配置React

在本地安装和配置React项目,您可以使用create-react-app这个官方推荐的脚手架工具。以下是安装React的步骤,包括安装Node.js、使用create-react-app创建React应用,以及启动开发服务器。 下载安装node.js运行以下命令,验证Node.js…

施耐德 Unity Pro PLC 编程软件介绍

Unity Pro 软件基本介绍 Unity Pro 是施耐德中大型 PLC 的编程软件&#xff08;<–> 对应西门子 Step7&#xff09; 支持的 PLC&#xff1a;施耐德中大型 PLC 中型 PLC&#xff1a;Premium、M340&#xff08;<–> 对应西门子 S7-300、S7-1200&#xff09;大型 PL…

精读 Generating Mammography Reports from Multi-view Mammograms with BERT

精读&#xff08;非常推荐&#xff09; Generating Mammography Reports from Multi-view Mammograms with BERT&#xff08;上&#xff09; 这里的作者有个叫 Ilya 的吓坏我了 1. Abstract Writing mammography reports can be errorprone and time-consuming for radiolog…

C++项目——集群聊天服务器项目(十)点对点聊天业务

本节来实现C集群聊天服务器项目中的点对点聊天业务&#xff0c;一起来试试吧 一、点对点聊天业务 聊天服务器中一个重要的功能就是实现点对点聊天&#xff0c;客户端发送的信息包含聊天业务msgid、自身 的id和姓名、聊天对象的id号以及聊天信息&#xff0c;例如&#xff1a; …

uniapp uni.scss中使用@mixin混入,在文件引入@include 样式不生效 Error: Undefined mixin.(踩坑记录一)

问题&#xff1a; 在uni.scss文件定义mixin 2. 在vue文件引入: 3. 出现报错信息: 4. 问题思考&#xff1a; 是不是需要引入uni.scss &#xff1f; 答案不需要 uni.scss是一个特殊文件&#xff0c;在代码中无需 import 这个文件即可在scss代码中使用这里的样式变量。uni-app的…

ubuntu23.10配置RUST开发环境

系统版本: gcc版本 下载rustup安装脚本: curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh下载完成后会自动执行 选择默认安装选项 添加cargo安装目录到环境变量 vim ~/.bashrc 默认已添加 使用环境变量立即生效 source ~/.bashrc 执行rust开发环境,在终端输入…

Vitepress部署到GitHub Pages,工作流

效果&#xff1a; 第一步&#xff1a; 部署 VitePress 站点 | VitePress 执行 npm run docs:build&#xff0c;npm run docs:preview&#xff0c;生成dist文件 第二步&#xff1a; 手动创建.gitignore文件&#xff1a; node_modules .DS_Store dist-ssr cache .cache .temp *…