makefile编译

文章目录

  • 一、g++和gcc的区别
  • 二、Linux下静态库和动态库
  • 三、makefile文件如何去编写

一、g++和gcc的区别

  1. 基本定义(参考AI让生活更美好
    gcc(GNU Compiler Collection)是一个编译器集合,最初是为C语言设计的,但现在它已经扩展支持包括C++、Fortran、Ada、Go、D等多种编程语言。g++是gcc的一部分,专门用于编译C++代码。
  2. 语法与用途
    尽管g++和gcc都可以用来编译C++代码,但它们的使用方式和默认行为有所不同。
    2.1 gcc:在默认情况下,gcc将代码视为C代码进行编译。如果要编译C++代码,必须使用-x c++或-lstdc++等选项来显式指定。
    2.2 g++:g++自动识别并编译C++代码,提供了对C++语言特性的更好支持,比如模板和异常处理。
# 使用gcc编译C++代码,需要显示指定
gcc -x C++ -o main main.cpp
# 使用g++编译C++代码,自动识别
g++ -o main main.cpp

3.链接器行为
gcc:编译C++代码时,不会自动链接C++标准库(libstdc++),需要手动链接选项
g++: 自动链接C++标准库,简化了编译和链接过程

# 使用gcc编译和链接C++代码,需要手动链接标准库
gcc -o my_program my_program.cpp -lstdc++# 使用g++编译和链接C++代码,自动链接标准库
g++ -o my_program my_program.cpp

4.代码混编
在涉及到C++和C语言代码需要混合编译的情况,首先要明确C代码和C++代码,在编译好C和CPP代码之后,在一起链接(在了解编译的时候,首先要了解程序运行的阶段预编译-编译-汇编-链接-生成可执行程序每一个阶段的过程)。

# 编译C代码
gcc -c my_c_code.c -o my_c_code.o# 编译C++代码
g++ -c my_cpp_code.cpp -o my_cpp_code.o# 链接生成最终可执行文件
g++ -o my_program my_c_code.o my_cpp_code.o

二、Linux下静态库和动态库

1.什么是库:库相当于封装了函数与数据,提供给用户去调用,库是在编译时期形式,没有到链接这一步。库可以使程序模块化,提高编程速度,实现代码复用。
WIndows(静态库:.lib、动态库:.dll
Linux(静态库:.a、动态库:.so
2.动态库和静态库的区别(这里不做过多赘述): link

三、makefile文件如何去编写

  1. 了解makefile文件
    makefile是一个用于自动化构建和管理项目的文件,通常与make工具一起使用。它定义了一系列的规则和依赖关系,告诉make如何从源代码生成可执行文件或其他目标。makefile主要功能包括:
    1.1定义目标:指定要生成的文件
    1.2依赖关系:列出目标文件所依赖的源文件或其他目标文件
    1.3构建规则:定义如何从依赖文件生成目标文件的命令
    1.4变量:使用变量来简化和重用命令和文件名

2.使用方法:参考: link
第一版:
在这里插入图片描述
注:-c 只允许执行到汇编阶段,不允许链接

第二版:

# OBJS 代替 依赖文件
# cc 代替gcc
# CFLAGS 代替 编译命令OBJS=add.o mul.o main.o
cc=gcc
CFLAGS=-call:mainmain:$(OBJS)$(cc) $(OBJS) -o main
add.o:add.c$(cc) $(CFLAGS) add.c
mul.o:mul.c$(cc) $(CFLAGS) mul.c
main.o:main.c$(cc) $(CFLAGS) main.c
clean:rm -rf *.o main

第三版:

# OBJS 代替 依赖文件
# cc 代替gcc
# CFLAGS 代替 编译命令OBJS=add.o mul.o main.o
cc=gcc
CFLAGS=-call:mainmain:$(OBJS)$(cc) $^ -o main
%.o:%.c$(cc) $^ $(CFLAGS) -o $@
clean:rm -rf *.o main

makefile语法:
$@:在规则的命令中,表示规则中的目标。
$^: 在规则的命令中,表示所有依赖条件。组成一个列表,以空格隔开,如果这个列表中有重复项,则去重
$<:在规则的命令中,表示第一个依赖条件。如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则。
推荐一篇写的很好的makefile文章: link

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

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

相关文章

fl studio mobile2024最新官方版V4.6.8安卓版+iOS苹果版

fl studio mobile&#xff0c;一款非常好用的音乐制作软件。该软件具有丰富多样的音乐类型让大家选择&#xff0c;内置多个好用的编辑工具、渲染工具、特效工具等可以使用。用户可以自由使用软件中的任何道具&#xff0c;直接在手机上编曲&#xff0c;进行音乐创作&#xff0c;…

iOS工程:获取手机相册权限,iOS原生系统弹窗, Privacy隐私政策选择,如何添加系统弹出并修改描述文字

【iOS工程】获取手机相册权限&#xff0c;iOS原生系统弹窗, Privacy隐私政策选择&#xff0c;如何添加系统弹出并修改描述文字 设备/引擎&#xff1a;Mac&#xff08;11.6&#xff09;/Mac Mini 开发工具&#xff1a;Xcode&#xff08;15.0.1&#xff09; 开发需求&#xff…

【Gaussian splatting系列学习】(三)

3DGS系列&#xff08;一&#xff09; 3DGS系列&#xff08;二&#xff09; 3DGS系列&#xff08;三&#xff09; 3D高斯球的颜色 基函数&#xff1a; 任何一个周期性函数可以分解为正弦和余弦的线性组合 球谐函数&#xff1a; 任何一个球面坐标的函数可以用多个球谐函数来近…

游戏引擎详解——图片

图片 图片的格式 图片文件格式pngjpg 纹理压缩格式ETC1/2PVRTCASTC 图片的属性 图片属性解释分辨率宽高像素值&#xff08;pt&#xff09;&#xff0c;如&#xff1a;1024*1024位深度用来存储像素颜色的值&#xff0c;如RGBA8888&#xff0c;红黄蓝透明度4个维度每个8bit&…

CentOS Docker搭建Mysql5.7集群

MySQL Replication MySQL提供了Replication功能&#xff0c;可以实现将一个数据库的数据同步到多台其他数据库。前者通常称之为主库&#xff08;master&#xff09;&#xff0c;后者则被称从库&#xff08;slave&#xff09;。MySQL复制过程采用异步方式&#xff0c;但延时非常…

初始redis:Zset有序集合

Set作为集合&#xff0c;有两个特点&#xff1a;唯一且无序。 Zset是有序集合&#xff0c;在保证唯一的情况下&#xff0c;是根据什么来排序的呢&#xff1f;排序的规则是什么&#xff1f; Zset中的member引入了一个属性&#xff0c;分数&#xff08;score&#xff09;&#…

立式报工台助力MES系统打造智能硬件解决方案

信息化与自动化的深度结合&#xff0c;使得企业在生产效率、质量控制以及资源管理等方面得以大幅提升。制造执行系统MES作为连接企业管理层与生产现场的重要桥梁&#xff0c;正在愈发得到重视。为了进一步强化MES系统的功能与应用&#xff0c;立式报工台作为一种新兴的智能硬件…

适用于 Windows 10 的最佳数据恢复免费软件是什么?

有没有适用于 Windows 10 的真正数据恢复免费软件&#xff1f;这篇文章将讨论这个话题&#xff0c;并分享什么是适用于 Windows 10/11/8.1/8/7/Vista/XP 的最佳数据恢复工具。 有没有适用于 Windows 10 的真正免费的数据恢复软件&#xff1f; 丢失重要数据&#xff0c;无论是由…

RISC-V vector(1) --- vector的引入与register说明

Vector相较于SIMD的优势 这两种实现方案&#xff0c;都是为了实现数据级并行性&#xff08;存在大量的数据可供程序同时计算&#xff09;&#xff1b; SIMD&#xff08;Single Instruction Multiple Data&#xff09; SIMD是将数据宽度和操作类型&#xff0c;都放在了指令中&a…

一道xss题目--intigriti-0422-XSS-Challenge-Write-up

目录 进入挑战 js代码 代码分析 构造payload ​编辑 结果 进入挑战 Intigriti April Challenge题目地址 打开题目后&#xff0c;找到对应页面的js代码&#xff0c;寻找一下我们用户可控的点 js代码 <!DOCTYPE html> <html lang"en"><head> …

[GKCTF 2021]excel 骚操作1

使用010editor打开发现zip头&#xff0c;改后缀名xlsx为zip&#xff0c;解压&#xff0c;在D:\python\flag (1)\xl\worksheets目录下有个sheet1.xml就是ecxel的sheet1的主要样式style 看到很多c r"B2" s"1&#xff0c;只是单元格数据不同而已 &#xff0c;还有的…

Awesome-LLMs-for-Video-Understanding - 基于大型语言模型的视频理解研究

Awesome-LLMs-for-Video-Understanding 是 基于大型语言模型的视频理解研究 github : https://github.com/yunlong10/Awesome-LLMs-for-Video-Understandingpaper&#xff1a;Video Understanding with Large Language Models: A Survey https://arxiv.org/pdf/2312.17432 视频…

C++20中的约束与概念

类模板、函数模板和非模板函数(通常是类模板的成员)可能与约束(constraint)相关联&#xff0c;该约束指定对模板参数的要求(requirements)&#xff0c;可用于选择最合适的函数重载和模板特化。约束是使用模板时需要通过模板参数满足的条件或要求。这些要求的命名集合称为概念(c…

Hadoop 分布式集群搭建

HDFS分布式集群搭建 一、部署规划1.1 进程规划1.2 软件规划1.3 用户规划1.4 目录规划 二、 搭建HDFS 分布式集群2.1 HDFS 集群配置2.1.1 下载安装 Hadoop2.1.2 修改 hadoop-env.sh 配置文件2.1.3 修改 core-site.xml 配置文件2.1.4 修改 hdfs-site.xml 配置文件2.1.5 修改 slav…

程序员:全栈的痛你不知道

上周一个同事直接对我开喷&#xff0c;骂我无能&#xff0c;说&#xff1a;“你怎么一个人就搞不定所有系统呢&#xff1f;”&#xff0c;我半支烟纵横IT江湖14余年&#xff0c;还是第一次被人这么嫌弃。 事情缘由 某公司的业务线特别多&#xff0c;有个业务线前后端项目共计…

ComfyUI IPAdapter plus的模型应该怎么装-免费版-2024.8.25

&#x1f386;背景 ipadapter相关的节点大家应该都不陌生&#xff0c;具体是做什么的就不详细介绍了&#xff0c;但是还是有很多新入门的朋友不太了解这个节点相关的这一堆模型到底应该怎么安装。这里就借着官方节点的介绍来大概讲下这个话题。 涉及到的节点源地址&#xff1…

【Qt】Qt系统 | Qt事件| 鼠标事件

文章目录 鼠标事件鼠标点击事件鼠标释放事件鼠标双击事件鼠标移动事件 滚轮事件 在 Qt 中&#xff0c;鼠标事件是用 QMouseEvent 实现的。当在窗口中按下鼠标或者移动鼠标时&#xff0c;都会产生鼠标事件 鼠标事件 鼠标点击事件 鼠标按下时通过 虚函数 mousePressEvent() 来…

线程安全是什么问题?如何引起?死锁是啥?如何解决?

目录 一、什么是线程不安全&#xff1f; 二、如何引起的线程安全&#xff1f;怎么解决&#xff1f; 1&#xff09;CPU调度执行是随机的&#xff0c;抢占式执行&#xff08;根本原因&#xff0c;硬件层面咱们无法干预&#xff09; 2&#xff09;多个线程&#xff0c;对同一变…

【Hot100】LeetCode—105. 从前序与中序遍历序列构造二叉树

目录 1- 思路递归 2- 实现⭐105. 从前序与中序遍历序列构造二叉树——题解思路 3- ACM 实现 原题连接&#xff1a;105. 从前序与中序遍历序列构造二叉树 1- 思路 递归 前序&#xff1a;中左右中序&#xff1a;左中右 让前序的第一个元素作为中序的分割点 分割思路 1- 递归…

做个实验

做个实验 #include <bits/stdc.h> using namespace std; #define int long long #define ll __int128_t #define ar array<int, 2> #define arr array<int, 3> int n, m, k, inf 1LL << 61, mod 998244353;// 1e97; const int N 5e5 50;void sol…