C++ PrimerPlus 复习 第一章 命令编译链接文件 make文件

news2024/10/7 19:22:02

第一章 命令编译链接文件

  • C++ 有什么呢?
  • C++ 源代码文件后缀
  • 运行C++过程
  • 可执行代码:
  • 编译语法:
  • make
    • Makefile 基础语法
    • 编写完make只要和将要编译的文件放一起就行 然后在该目录使用make命令,就将自动运行;
    • 基础的Makefile版本 现在的缺点也大 \^-\^
    • 更加健全的Makefile 但还是有不小的缺点
    • 常用版本

C++ 有什么呢?

面向对象编程:
主要就是将功能封装
泛型编程:
各种各样的模板

C++ 源代码文件后缀

在这里插入图片描述

运行C++过程

源代码 --> 编译器 --> 目标代码 --> 链接程序 -->可执行代码;
在这里插入图片描述

可执行代码:

就是一大堆指令的集合
.exe 和 .out 文件都是可执行文件的扩展名,但它们通常与不同的操作系统和编程环境相关联。
以下是它们的一些主要区别:
.exe 文件:
Windows系统中常见的可执行文件扩展名。
通常用于Windows上的可执行文件,如C++或C#程序。
.exe 文件包含了Windows操作系统所需的可执行代码和元数据。
.out 文件:
.out 文件通常在类Unix和类Linux操作系统中见到,如Linux和macOS。
这是一种通用的可执行文件扩展名,用于包含在Unix/Linux环境下的各种编程语言(如C/C++、Python等)编译后生成的可执行文件。
.out 文件不包含特定于操作系统的元数据,因为它们通常在Unix/Linux环境中运行,这些系统不需要额外的元数据来识别可执行文件。
需要注意的是,这些扩展名并不是绝对的,它们只是一种约定,你可以根据需要为可执行文件选择不同的扩展名。在Linux或macOS中,你可以通过使用chmod命令将文件设置为可执行,而不需要特定的扩展名。只要文件具有可执行权限,你就可以在终端中运行它。
总的来说,.exe 文件通常与Windows相关,而.out 文件通常与Unix和Linux相关,但这只是一种通用的命名约定,不是绝对规则。

编译语法:

编译器自动将目标代码文件(.o)传递给系统链接程序,该程序将代码与库代码结合起来,生成一个可执行文件。
在默认情况下,可执行文件为a.out ,win是exe
如果只使用一个源文件,链接程序还将删除spiffy.o文件,因为这个文件不再需要了。
要运行该程序,只要输入可执行文件的文件名即可
直接没有 error.o 文件

-c 选项来告诉编译器只生成目标文件,而不生成可执行文件
没有-c
g++ error5.cpp -o error5.exe
在这里插入图片描述

g++ -c .\sumafile_6_16.cpp 生成目标文件 sumafile_6_16.o

g++ -o sumafile.exe .\sumafile_6_16.o 生成可执行文件 sumafile.exe

多个源文件
在这里插入图片描述
单个无法,运行这个,生成main.exe文件运行

g++ -o filename.exe studentc.o use_stuc.o
前面可以直接填filename不加exe,可以直接生成filename.exe文件

在这里插入图片描述

make

在这里插入图片描述
上面是我将要编译链接的文件
如果我进行常规处理

g++ -c  studentc.cpp -o studentc.o
g++ -c  use_stuc.cpp -o use_stuc.o
g++ -o student studentc.o use_stuc.o

现在看起来还好是吧,但文件一多就是痛苦,所以引用make命令

Makefile 基础语法

语法:
[目标]: [依赖]
(tab制表符)[命令]

普通版本 缺点大

main.exe: file1.cpp file2.cpp
	g++  file1.cpp file2.cpp -o main.exe

编写完make只要和将要编译的文件放一起就行
然后在该目录使用make命令,就将自动运行;

基础的Makefile版本 现在的缺点也大 ^-^

$@ 表示目标文件
$^ 表示所有的依赖文件
$< 表示第一个依赖文件
$? 表示比目标还要新的依赖文件列表

CXX = g++
TARGET = hello.exe
OBJ = file1.o file2.o

CXXFLAGS = -c -Wall

$(TARGET): $(OBJ)
	$(CXX) $^ -o $@

%.o: %.cpp
	$(CXX) $(CXXFLAGS) $< -o $@

.PHONY: clean
clean:
	del /Q *.o hello.exe

更加健全的Makefile 但还是有不小的缺点

# CXX = g++
# TARGET = hello.exe
# OBJ = file1.o file2.o

# CXXFLAGS = -c -Wall

# $(TARGET): $(OBJ)
# 	$(CXX) $^ -o $@

# %.o: %.cpp
# 	$(CXX) $(CXXFLAGS) $< -o $@

# .PHONY: clean
# clean:
# 	del /Q *.o hello.exe

常用版本

在这里插入图片描述

CXX = g++
TARGET = main
SRC = $(wildcard *.cpp)
OBJ = $(patsubst %.cpp, %.o, $(SRC))

CXXFLAGS = -c -Wall

# all: $(TARGET) clean

$(TARGET): $(OBJ)
	$(CXX) -o $@ $^
	make clean

%.o: %.cpp
	$(CXX) $(CXXFLAGS) $< -o $@
	

.PHONY: clean
clean:
	del /Q *.o

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

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

相关文章

GaussDB(DWS)云原生数仓技术解析:湖仓一体,体验与大数据互联互通

文章目录 前言一、关于数据仓库需求场景分类二、数据仓库线下部署场景2.1、线下部署场景介绍及优劣势说明2.2、线下部署场景对应的客户需求 三、数据仓库公有云部署场景3.1、公有云部署场景介绍及优劣势说明3.2、公有云部署场景对应的客户需求 四、为何重视数据共享&#xff08…

【洛谷 P1364】医院设置 题解(图论+深度优先搜索)

医院设置 题目描述 设有一棵二叉树&#xff0c;如图&#xff1a; 其中&#xff0c;圈中的数字表示结点中居民的人口。圈边上数字表示结点编号&#xff0c;现在要求在某个结点上建立一个医院&#xff0c;使所有居民所走的路程之和为最小&#xff0c;同时约定&#xff0c;相邻接…

windows彻底卸载unity

1.控制面板卸载 双击打开桌面的控制面板&#xff0c;选择卸载程序&#xff0c;选中Unity和UnityHub右击卸载。 2.清除unity的注册表 在运行中输入“regedit”双击打开注册表界面 删除 HKEY_CURRENT_USER\Software\Unity 下所有项 删除 HKEY_CURRENT_USER\Software\Unity Tec…

项目:TCP在线云词典

一.要求 1.搭建的框架环境中实现并发&#xff0c;实现多个用户同时查询的功能。 2.服务器分别保存每个用户的使用记录&#xff0c;客户端可以查询日志的功能。 3.基本的查询单词的功能。 4.密码验证的功能&#xff0c;实现登录验证账号和密码是否正确。 二.流程和框架 框架 …

【Spring容器的启动过程】

Spring容器的启动过程 Spring 在初始化过程中有二个非常重要的步骤&#xff0c;容器的初始化与刷新。 初始化流程 如果想生成 bean 对象&#xff0c;那么就需要一个 beanFactory 工厂&#xff08;DefaultListableBeanFactory&#xff09;如果想让加了特定注解&#xff08;如 …

爬虫数据存储:技术、策略与实践(一)

文章目录 &#x1f34b;引言&#x1f34b;xlrd库和xlwt库&#x1f34b;创建Excel文件&#x1f34b;通过Python代码向Excel写入数据&#x1f34b;案例实战 &#x1f34b;引言 本节主要介绍一下在使用网络爬虫技术的时候&#xff0c;如何将数据存储到Excel中去 &#x1f34b;xl…

云原生之使用Docker部署Teedy轻量级文档管理系统

云原生之使用Docker部署Teedy轻量级文档管理系统 一、Teedy介绍1.1 Teedy简介1.2 Teedy特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Teedy镜像五、部署Teedy轻量级文…

git 本地工作区和仓库区基本使用

(1)git 本地有三个区 工作区和暂存区和 git管理的仓库. &#xff08;自行动手实践理解,然后就入门了&#xff09;(2)本地初次使用git做的事情,需要做如下工作 git config --global user.name "xx" git config --global user.email xxxqq.com git config --globa…

山西电力市场日前价格预测【2023-09-15】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-15&#xff09;山西电力市场全天平均日前电价为338.85元/MWh。其中&#xff0c;最高日前电价为415.06元/MWh&#xff0c;预计出现在19: 15。最低日前电价为270.06元/MWh&#xff0c;预计…

OPC是通讯协议吗安全性

目录 1 安全防护 1.1 防火墙 1.2 网闸 2 OPC是通讯协议吗 2.1 什么通讯协议 2.2 那么OPC又是什么&#xff1f; OPC官方说明文档 1 安全防护 本文阐述了控制网络以OPC接口接入信息网络应当采用的安全防护。 1.1 防火墙 防火墙是大家熟知的网络安全产品,并被用作控制网…

laravel8框架-语言包的安装和配置

1, 查找 laravel框架语言包地址&#xff1a; \根目录\resources\lang\ 默认有个 en 语言包 2&#xff0c;下载 和 安装 下载地址&#xff1a;https://packagist.org/ 搜索 laravel/lang 参考网址&#xff1a;https://packagist.org/packages/overtrue/laravel-lang 选择你…

ARM Linux DIY(十一)板子名称、开机 logo、LCD 控制台、console 免登录、命令提示符、文件系统大小

文章目录 前言板子名称uboot Modelkernel 欢迎词、主机名 开机 logoLCD 控制台console 免登录命令提示符文件系统大小 前言 经过前面十篇文章的介绍&#xff0c;硬件部分调试基本完毕&#xff0c;接下来的文章开始介绍软件的个性化开发。 板子名称 uboot Model 既然是自己的…

Games101作业0(vscode连接VB虚拟机)

作业0 配置环境: 基本配置在pa0中都有,下面介绍使用vscode连接VB虚拟机快捷开发 vscode连接VB虚拟机 1.用户名 可以看到Username为cs18并非为css180 2.密钥 在window主机生成密钥 ssh-keygen #一路回车3.VB虚拟机配置ssh sshd_config配置 cd /etc/ssh/ vim sshd_confi…

丰田工厂停产竟然因为磁盘...

丰田因磁盘空间不足关闭14家工厂 在如今的信息时代&#xff0c;无论是生活还是工作&#xff0c;我们都离不开计算机和网络。然而&#xff0c;令人惊讶的是&#xff0c;一家全球知名的汽车制造商——丰田&#xff0c;却因为磁盘空间不足的问题&#xff0c;被迫关闭了14家工厂。…

DP专题2 爬楼梯|

题目&#xff1a; 思路&#xff1a; 根据题意&#xff0c;我们先找到对应的 n 阶台阶的方案数是多少。 n 1 f(n) 1 n 2 f(n) 2 n 3 f(n) 3 n 4 f(n) 5 n 5 f(n) 8 ...... ...... n n f(n) f(n - 2) f(n - 1…

读高性能MySQL(第4版)笔记09_创建高性能索引(下)

1. 覆盖索引 1.1. 设计优秀的索引应该考虑到整个查询&#xff0c;而不单是WHERE条件部分 1.2. 如果一个索引包含&#xff08;或者说覆盖&#xff09;所有需要查询的字段的值&#xff0c;我们就称之为覆盖索引 1.3. 只有B-tree索引可以用于覆盖索引 1.4. 如果查询只需要扫描…

用Python实现链式调用

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 我们在使用Django的models查询数据库时&#xff0c;可以看到有这种写法&#xff1a; form app.models import XXX query XXX.objects.all() query query.filter(name123, age456).filter(salary999)在这种写法里面&#xf…

matlab根轨迹绘制

绘制根轨迹目的就是改变系统的闭环极点&#xff0c;使得系统由不稳定变为稳定或者使得稳定的系统变得更加稳定。 在使用PID控制器的时候&#xff0c;首先要确定的参数是Kp&#xff0c;画成框图的形式如下&#xff1a; 也就是想要知道Kp对系统性能有哪些影响&#xff0c;此时就…

go 包的引入

本文介绍下下go包的管理&#xff0c;以linux平台为例。 先看下目录结构&#xff1a; test目录下的test.go test2目录下的test.go 主函数的调用 此时执行会报错&#xff0c;需要用mod进行包的管理,执行下面命令 go mod init godir 生成go.mod文件 执行结果&#xff1a;

【MySQL】mysql中有哪几种类型的备份技术?它们各自有什么优缺点?

为什么要备份&#xff1f;备份类型&#xff08;从类型的角度&#xff09;备份技术&#xff08;从技术手段的角度&#xff09;不同备份方法的比较感谢 &#x1f496; 为什么要备份&#xff1f; 数据库或它所在的平台可能会出现问题&#xff0c;这时候数据库中的数据可能就遭到了…