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

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

第一章 命令编译链接文件

  • 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.cppg++  file1.cpp file2.cpp -o main.exe

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

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

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

CXX = g++
TARGET = hello.exe
OBJ = file1.o file2.oCXXFLAGS = -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

相关文章:

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

第一章 命令编译链接文件 C 有什么呢&#xff1f;C 源代码文件后缀运行C过程可执行代码&#xff1a;编译语法&#xff1a;makeMakefile 基础语法编写完make只要和将要编译的文件放一起就行 然后在该目录使用make命令&#xff0c;就将自动运行&#xff1b;基础的Makefile版本 现…...

微信小程序——常用组件的属性介绍

常用的组件内容标签 text 文本组件类似于HTML中的span标签&#xff0c;是一个行内元素rich-text 富文本标签支持把HTML字符串渲染为WXML结构 text标签的基本使用 通过text组件的selectable属性&#xff0c;实现长按选中文本内容的效果。只有text标签支持长按选中效果&#x…...

【深度学习】 Python 和 NumPy 系列教程(廿七):Matplotlib详解:3、多子图和布局:散点矩阵图(Scatter Matrix Plot)

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 3、多子图和布局 1. subplot()函数 2. subplots()函数 3. 散点矩阵图&#xff08;Scatter Matrix Plot&#xff09; 一、前言 Python是一种高级编程语言&#xff0c;由Guido van Rossum于…...

解决jupyter打开的默认路径问题

已经安装完anaconda&#xff0c;但是jupyter每一次打开的路径都不是自己想要的路径&#xff0c;可以在配置文件中修改jupyter打开的默认路径&#xff0c;具体步骤如下&#xff1a; 首先打开anaconda的命令行 如果有多个环境的&#xff0c;需要输入conda activate 环境名称以下命…...

Git 学习笔记

Git 学习笔记 Git 简介 Git 是一个 开源的分布式版本控制系统。 什么是版本控制&#xff1f; 版本控制是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。 什么是分布式版本控制系统&#xff1f; 介绍分布式版本控制系统前&#xff0c;有…...

【Qt】QGroundControl入门3:源码初探

1、源码目录 QGroundControl使用pro来管理工程,可以使用qmake来编译。同时还有CMakeLists.txt,应该可以使用cmake来编译,本人还没有尝试。 QGroundControl是跨平台的,支持android、win、linux、mac、ios系统,在QGCCommon.pri中可见关于跨平台编译的配置。 1.1 目录树 …...

腾讯mini项目-【指标监控服务重构】2023-07-31

今日已办 trace_id传播 关于如何使用 trace_id 创建 span 的思路 【暂未实现 & 测试】 调研 SpanProcessor 阅读源码的test 明日待办 根据 trace_id 创建 span&#xff0c;应该需要 parent span_id 才能有 trace 的树状 span 的关系...

Rust通用编程概念(3)

Rust通用编程概念 1.变量和可变性1.执行cargo run2.变量3.变量的可变性4.常量5.遮蔽5.1遮蔽与mut区别1.遮蔽2.mut 2.数据类型1.标量类型1.1整数类型1.2浮点数类型1.3数字运算1.4布尔类型1.5字符类型 2.复合类型2.1元组类型2.2数组类型1.访问数组2.无效的数组元素访问 3.函数3.1…...

学Python的漫画漫步进阶 -- 第四步

学Python的漫画漫步进阶 -- 第四步 四、运算符4.1 算术运算符4.2 比较运算符4.3 逻辑运算符4.4 位运算符4.5 赋值运算符4.6 运算符的优先级4.7 练一练4.8 运算符的总结全部16步完成后 &#xff0c;后续就是介绍项目实战&#xff0c;请大家给予点赞、关注&#xff01; 四、运算符…...

【LeetCode-中等题】18. 四数之和

文章目录 题目方法一&#xff1a;双指针&#xff08;定2动2&#xff09; 题目 方法一&#xff1a;双指针&#xff08;定2动2&#xff09; 这题可以参考【LeetCode-中等题】15. 三数之和 区别在于&#xff0c;三数之和只需要用一个for循环定住一个数&#xff0c;然后设置两个前…...

每日一题 102二叉树的层序遍历

题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 示例 2&#xff1a…...

牛客: BM4 合并两个排序的链表

牛客: BM4 合并两个排序的链表 文章目录 牛客: BM4 合并两个排序的链表题目描述题解思路题解代码 题目描述 题解思路 以链表一为主链表,遍历两条链表 若当前链表二的节点val小于当前链表一的下一个节点val,则将链表链表二的该节点连到链表一的节点的下一个,链表一的当前节点往…...

C语言基础知识点(六)二维数组指针和地址

#include <stdio.h>int main() {int a[2][3] {2, 4, 6,8, 10, 12};printf("a:%p, a1:%p\n", a, a 1); // 相差3*sizeof&#xff08;int&#xff09;12&#xff0c;二维数组名是一个指向每一行的指针&#xff0c;a:0061FF08, a1:0061FF14prin…...

nodejs格式化输入

需求 比如我现在要格式为Axxx-xxx&#xff08;xxx是数字&#xff09;的格式&#xff0c;但是输入有可能为A1-2这种情况&#xff0c;就需要补零&#xff0c;变成A001-002 代码实现 const regex /^A(\d)\-(\d)$/; // 正则匹配桩号合法格式const match input.match(regex);if…...

国家网络安全周 | 金融日,一起 get金融行业数据安全

2023国家网络安全宣传周 热度一直在持续&#xff01; 9月15日是国家网络安全宣传金融日。 目前随着国际形势愈发严峻&#xff0c;金融机构基础设施的全面数字化升级&#xff0c;带来了全新的安全问题。数据安全不单是技术问题&#xff0c;更是已经成为一个关系社会稳定发展的…...

分布式事务解决方案之TCC

分布式事务解决方案之TCC 什么是TCC事务 TCC是Try、Confirm、Cancel三个词语的缩写&#xff0c;TCC要求每个分支事务实现三个操作&#xff1a;预处理Try、确认 Confirm、撤销Cancel。Try操作做业务检查及资源预留&#xff0c;Confirm做业务确认操作&#xff0c;Cancel实现一个…...

Git 的基础命令 码云 gitee

就比如&#xff0c;我们的开发吧&#xff0c;我自己本地分支是dqh&#xff0c;远程分支也是new //我开始提交代码 //1&#xff0c;git add . //2&#xff0c;git commit -mXXX功能 //3&#xff0c;git pull origin new(你们现在这个版本的开发分支) //这里…...

探索工业4.0:数字孪生如何重塑工业生产流程?

在过去的几十年里&#xff0c;工业生产经历了从机械化、自动化到数字化的巨大转变。随着工业4.0的到来&#xff0c;我们正处于第四次工业革命的边缘&#xff0c;这次革命将由数字孪生技术引领。本文将深入探讨数字孪生在工业生产中的应用和潜力。 数字孪生&#xff08;Digital …...

window server事件ID说明

重启&#xff1a;1074 6013&#xff1a;系统运行时间 6008&#xff1a;非正常关机或者意外关机 WindowsServer2012R2事件id6008什么意思&#xff1f; 在Windows Server 2012 R2中&#xff0c;事件ID 6008是一个系统事件&#xff0c;它通常表示系统的非正常关机或意外关机。当系…...

router-link 和 router-view的区别

router-link 实现路由之间的跳转 router-view&#xff08;路由出口组件 -> 渲染路径匹配到的视图组件&#xff09; 当你访问的地址与路由path相符时&#xff0c;会将指定的组件替换该router-view router-link router-link 点击实现路由跳转&#xff0c;to属性指向目标地址&…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...