当前位置: 首页 > news >正文

【Linux】GNU编译器基础

文章目录

    • GCC
    • Makefile、make

GCC

   常见的GNU编译器是GCC其包含gcc以及g++等,适用于C/C++中,在Windows系统中通常使用IDE进行程序的编写和编译、链接等操作,但在Linux系统中通常使用GNU编译器来进行,对于C/C++等高级语言需要进行预编译、编译、汇编、链接最后才能生成可执行文件使用。实际使用直接g++ test.cpp -o test.out && ./test.out生成可执行文件test.out并运行,如果不用-o指定生成名称的话即g++ test.cpp && ./a.out则默认生成a.out

GNU编译器基本选项说明实例
-E预编译:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法; 生成.i预处理文件g++ -E test.cpp -o test.i
-S编译:检查语法,将预处理后文件编译,生成.s汇编文件g++ -S test.i -o test.s
-c汇编:将汇编文件生成目标文件(二进制文件); 生成.o文件(机器码)g++ -c test.s -o test.o
-o链接、指定输出文件的名称。当与编译和链接命令一起使用时,它指示编译器或链接器将最终的可执行文件或库输出到指定的文件名g++ test.o -o test.out
-D程序编译时,指定一个宏定义g++ test.cpp -o test.out -D MAX_NUM
-w编译时不生成任何警告g++ test.cpp -o test.out -w
-Wall编译时生成全部警告g++ test.cpp -o test.out -Wall
-std指定编译的标准g++ -std=c++11 test.cpp -o test.out
-l编译时指定使用到的库----
-L编译时指定库的路径----
-g编译时生成调试信息,可以进行调试----

Makefile、make

   一个项目通常有多个源文件,如果要使用GNU编译器逐个编译的话则十分复杂例如g++ a.cpp b.cpp c.cpp d.cpp -o test.out所以使用Makefile文件对编译的规则进行封装,指定不同源文件的编译顺序以及编译规则,最后使用make命令进行自动编译,当前目录下使用make命令会自动进入Makefile文件并按照其中规定的规则进行编译。

  • 命名:makefile/Makefile
  • 规则:一个makefile文件中有一个或者多个规则,如下为一个基本规则。
目标 ...(可以多个):依赖 ...命令(必须TAB缩进)...
...
test.out:a.cpp b.cpp c.cpp d.cpp g++ a.cpp b.cpp c.cpp d.cpp -o test.out

目标即最终要生成的文件例如test.out
依赖则是生成目标所需要的文件例如a.cpp b.cpp c.cpp d.cpp
命令则对依赖执行操作生成目标例如g++必须使用TAB缩进

  • 原理:某个规则中的命令执行前检查规则中的依赖,存在则执行不存在则继续向下检查是否有规则是生成该依赖的有则首先执行生成依赖的其他规则其他规则都是为第一个规则服务
test.out:a.o b.o c.o g++ a.o b.o c.o -o test.outa.o:a.cpp //生成依赖a.o规则g++ -c a.cpp -o a.ob.o:b.cpp //生成依赖b.o规则g++ -c b.cpp -o b.oc.o:c.cpp //生成依赖c.o规则g++ -c c.cpp -o c.o
  • 检测更新:在执行规则中的命令时。会比较目标和依赖的文件时间,如果依赖的时间较晚则需要重新生成目标仅对更改的依赖和最终的生成目标的规则重新执行其他未变动的规则不用执行。
  • 变量:
      自定义变量:变量名=变量值 var=world $(var) //通过符号$获取变量的内容==world
预定义变量说明
AR归档维护程序的名称,默认为ar
CCC编译器名称,默认为cc
CXXC++编译器的名称,默认为g++
$@目标的完整名称,只可在命令中使用
$<第一个依赖文件的名称,只可在命令中使用
$^所有的依赖文件,只可在命令中使用
test.out:a.cpp b.cpp c.cpp d.cpp $(CXX) $^ -o $@ //等价于g++ a.cpp b.cpp c.cpp d.cpp -o test.out//可直接使用自定义变量
target=test.out
origin=a.cpp b.cpp c.cpp d.cpp$(target):$(origin)$(CXX) $(origin) -o $(target)
  • 模式匹配%即为一个通配符,匹配一个字符串。
target=test.out
origin=a.o b.o c.o
$(target):$(origin)$(CXX) $(origin) -o $(target)%.o:%.cpp //多次匹配生成依赖a.o、b.o、c.o的规则$(CXX) -c $< -o $@
  • 函数
函数功能参数返回实例
$(wildcard ..)获取指定目录下的指定类型的文件列表某个或多个目录下对应的某种类型的文件,多个目录用空格间隔得到若干个文件的文件列表,文件名使用空格间隔$(wildcard ./*.c ./*.o)//获取当前目录所有.c和.o文件
$(patsubst . .. ...)查找...中的字符串和.的字符串是否符合,一致则转化为..字符串均可以使用通配符%表示任意字符串返回被替换后的字符串$(patsubst %.c,%.o,a.c b.c c.c )//返回为a.o b.o c.o 仅进行字符串的改变不改变文件的本身属性
target=test.out
origin=$(wildcard ./*.c)
index=$(patsubst %.c %.o $(origin))$(target):$(index)$(GXX) $(index) -o $(target)
%.o:%.c$(GXX) -c $< -o $@.PHONY:clean //伪目标,不会生成文件
clean: //删除所有的.o文件,使用外部命令行使用make clean即可rm ./*.o  //必须使用TAB缩进

相关文章:

【Linux】GNU编译器基础

文章目录 GCCMakefile、make GCC 常见的GNU编译器是GCC其包含gcc以及g等&#xff0c;适用于C/C中&#xff0c;在Windows系统中通常使用IDE进行程序的编写和编译、链接等操作&#xff0c;但在Linux系统中通常使用GNU编译器来进行&#xff0c;对于C/C等高级语言需要进行预编译、编…...

Linux 软件安装:从源码编译到包管理器安装

Linux 软件安装&#xff1a;从源码编译到包管理器安装 在 Linux 操作系统中&#xff0c;软件安装是一个非常重要的任务。不同的软件安装方式有不同的优缺点&#xff0c;本篇博客将介绍 Linux 软件安装的几种方式&#xff0c;包括从源码编译安装、使用包管理器安装和使用第三方…...

Python3 match-case 语句

前言 本文主要介绍match-case语句与switch-case的区别&#xff0c;及match-case语句的基本用法。 文章目录 前言一、switch-case 和match-case的区别二、match-case的基本用法1、可匹配的数据类型2、多条件匹配3、通配符匹配 一、switch-case 和match-case的区别 C语言里面s…...

图论第三天

似乎要团建了&#xff0c;我再猫会。我必须参与上团建再走。 130.被围绕的区域 先把外围的O变成A&#xff0c;再把飞地的O变成X&#xff0c;再把外围A变回O class Solution { public:int neighbor[4][2] {1,0,0,-1,-1,0,0,1};void solve(vector<vector<char>>&a…...

计算机网络学习2

文章目录 信道复用技术 第三章数据链路层概述数据链路层的三个重要问题封装成帧和透明传输差错检测可靠传输的相关基本概念可靠传输的实现机制停止等待协议回退N帧协议选择重传协议 点对点协议PPP共享式以太网网络适配器和MAC地址CSMA_CD协议的基本原理共享式以太网的争用期共享…...

unittest框架

目录 框架&#xff1a; unittest框架: 使用的原因: 核心要素(组成): TestCase测试用例: 可能出现的错误&#xff1a; TestSuite(测试套件): TestRunner(测试执行): 整体步骤: 查看执行结果: TestLoader测试加载: 方法级别Fixture: 类级别Fixture: 模块级别Fixture: 用例脚本…...

Python中的__str__和__repr__:揭示字符串表示的奥秘

标题&#xff1a;Python中的__str__和__repr__&#xff1a;揭示字符串表示的奥秘 摘要 在Python中&#xff0c;对象的字符串表示对于调试和日志记录至关重要。__str__和__repr__是两个特殊的方法&#xff0c;用于定义对象的字符串表示形式。尽管它们在功能上相似&#xff0c;…...

gazebo插入一个图片

在下面的目录下添加文件夹 my_ground_plane 文件夹内容如下 model.sdf <?xml version"1.0" encoding"UTF-8"?> <sdf version"1.4"><model name"my_ground_plane"><static>true</static><link na…...

(已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据

Modals是Bootstrap中用户弹框用的组件,使用时不需要额外引入其他插件,在引入了boostrap.js或者boostrap.min.js前提下就可以使用。 官方的示例: <!-- Button trigger modal --> <button type="button" class="btn btn-primary" data-bs-…...

网络编程介绍(IP)(一)

定义&#xff1a;可以让设备中的程序与网络上其他设备中的程序进行数据交互&#xff08;实现网络通信的&#xff09;。 java.net.*包下提供了网络编程的解决方案。 基本的通信架构&#xff1a; CS架构&#xff08; Client客户端/Server服务端 &#xff09;&#xff1a; Clie…...

C语言 指针——函数指针

目录 什么是函数指针&#xff1f; 函数指针的定义 定义函数指针时的常见错误 函数指针有什么用&#xff1f; 函数指针的主要应用 什么是函数指针&#xff1f; 函数指针 (Function Pointer) 就是指向函数的指针变量 数据类型 ( * 指针变量名 ) ( 形参列表 ); 例如&#x…...

【C++】———list容器

前言 1.list容器简单来说其实就是之前的链表结构。 2.这里的list用的是双向带头结点的循环链表。 目录 前言 一 构造函数 1.1 list (); 1.2 list (size_type n, const value_type& val value_type() ); 1.3 list (InputIterator first, InputIterator last…...

【网络安全技术】——期末复习(冲刺篇)

&#x1f4d6; 前言&#xff1a;快考试了&#xff0c;做篇期末总结&#xff0c;都是重点与必考点。 题型&#xff1a;材料分析题、简答题、看图分析题 课本&#xff1a; 目录 &#x1f552; 1. 计算机网络安全概述&#x1f558; 1.1 安全目标&#x1f558; 1.2 常见的网络安全…...

Python中Web开发-Django框架

大家好&#xff0c;本文将带领大家进入 Django 的世界&#xff0c;探索其强大的功能和灵活的开发模式。我们将从基础概念开始&#xff0c;逐步深入&#xff0c;了解 Django 如何帮助开发人员快速构建现代化的 Web 应用&#xff0c;并探讨一些最佳实践和高级技术。无论是初学者还…...

1882java密室逃脱管理系统 Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java密室逃脱管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&…...

LeetCode 两两交换链表中的节点

原题链接24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff0c;请看图片的过程模拟&#xff0c;这里添加了一个哨兵节点0&#xff0c;目的是为了方便操作&#xff0c;得到指向1节点的指针。 class Solution {public:ListNode* swapPairs(ListNod…...

STM32作业实现(五)温湿度传感器dht11

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…...

java mybatis处理大数据量,开启和配置二级缓存,及注意事项,已解决

注意事项&#xff1a; 尽量避免使用下面方式写sql否则会降低服务器性能&#xff1a; mybatis二级缓存开启后&#xff0c;避免使用事务注解&#xff08;加上事务注解后二级缓存数据会导致两次访问不一致问题&#xff09;&#xff1a; 3. 返回的对象实体类&#xff0c;要实现Se…...

在 LLM 架构中应用多专家模型

本文转载自&#xff1a;在 LLM 架构中应用多专家模型 2024年 3月 14日 By Kyle Kranen and Vinh Nguyen https://developer.nvidia.cn/zh-cn/blog/applying-mixture-of-experts-in-llm-architectures/ 文章目录 一、概述二、LLM 架构领域的专家齐聚一堂1、模型容量2、MoE 在降低…...

C语言编程代码软件:深入探索与实战应用

C语言编程代码软件&#xff1a;深入探索与实战应用 在编程的广袤领域中&#xff0c;C语言以其独特的魅力吸引着无数编程爱好者。作为一种基础且强大的编程语言&#xff0c;C语言在软件开发、系统编程、嵌入式系统等领域发挥着不可替代的作用。而要想熟练掌握C语言&#xff0c;…...

ChatGPT资源宝库:从提示工程到项目实践的完整指南

1. 项目概述&#xff1a;一份关于ChatGPT的“Awesome”清单意味着什么&#xff1f;如果你最近在GitHub上搜索过任何与ChatGPT、AI或提示工程相关的内容&#xff0c;那么你大概率见过一个以“awesome-”开头的仓库。而sindresorhus/awesome-chatgpt无疑是这个领域里最知名、最常…...

AICoverGen终极指南:5分钟用AI制作专业级翻唱歌曲

AICoverGen终极指南&#xff1a;5分钟用AI制作专业级翻唱歌曲 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen 想不想让AI…...

C# AI开发实战:BotSharp框架构建企业级NLP应用指南

1. 项目概述&#xff1a;当C#开发者遇上AI应用开发如果你是一名长期深耕.NET生态的开发者&#xff0c;最近看着Python在AI领域风生水起&#xff0c;心里是不是有点痒&#xff0c;又有点不甘&#xff1f;总觉得为了跑个模型、搭个智能对话&#xff0c;就得切到另一个完全不同的技…...

KMS智能激活终极指南:如何一键永久激活Windows和Office

KMS智能激活终极指南&#xff1a;如何一键永久激活Windows和Office 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗&#xff1f;每次重装系统后都要重新激活Office&…...

【c++面向对象编程】第24篇:类型转换运算符:自定义隐式转换与explicit

目录 一、一个自然的想法 二、类型转换运算符的基本语法 写法 使用 三、隐式转换的风险 问题1&#xff1a;意外的不希望发生的转换 问题2&#xff1a;多个转换路径的歧义 问题3&#xff1a;与构造函数隐式转换叠加导致混乱 四、explicit&#xff1a;禁止隐式转换 语法…...

Agent Framework 中的 Workflow Composition

在前面的文章中&#xff0c;我们已经介绍了 Agent Framework 中如何定义流程节点&#xff0c;以及 Workflow 的流式执行事件。 如果你对这些概念还不太熟悉&#xff0c;可以先回顾上一篇文章&#xff1a; Agent Framework 定义流程节点以及节点的流式输出 这一节我们来介绍 Wor…...

动态目标跨镜无缝接力追踪技术白皮书

一、前言在全域视觉监控、智能安防、智慧园区、交通管控、工业巡检等核心场景中&#xff0c;动态目标&#xff08;人员、车辆、设备等&#xff09;的跨摄像头连续追踪是实现智能化管理的核心需求。当前行业常规追踪方案普遍存在轨迹断点、坐标漂移、身份错乱等痛点&#xff0c;…...

大语言模型并行推理技术Hogwild! Inference解析

1. 大语言模型并行推理的技术挑战在传统的大语言模型推理过程中&#xff0c;文本生成采用的是严格的自回归方式&#xff0c;即每个token的生成都依赖于之前所有token的输出。这种串行模式虽然保证了生成的连贯性&#xff0c;但也带来了显著的性能瓶颈。以1750亿参数的GPT-3为例…...

智能跨平台文件同步革命:OpenMTP让Mac与Android无缝连接

智能跨平台文件同步革命&#xff1a;OpenMTP让Mac与Android无缝连接 【免费下载链接】openmtp OpenMTP - Advanced Android File Transfer Application for macOS 项目地址: https://gitcode.com/gh_mirrors/op/openmtp 你是否曾经为Mac和Android设备之间的文件传输而烦…...

影刀RPA跨境店群运营架构:多账号环境隔离与 Python 高并发调度系统实战

关于我一个曾经死磕底层算法、痴迷于压榨软硬件性能、满脑子分布式高可用架构的资深开发者&#xff0c;最后跑去给跨境工作室的“Boss”写店群底层自动化调度系统这件事。 很多以前在技术圈里混的同行&#xff0c;或者是看着我一路从 ImageTransPro 图像处理软件 1.0 重构做到…...