C++ > Cmake
目录
编译器
多文件编译与链接
Makefile构建系统
编译器
厂商 C C++
GNU gcc g++
main.cpp
#include <cstdio>int main() {printf("Hello, world!\n");return 0;
}
编译器, 是一个根据源代码生成机器码的程序
g++ main.cpp -o a.out
调用编译器程序g++, 读取main.cpp中源码, 根据C++标准生成相应的机器指令码, 输出到a.out可执行文件
./a.out
执行可执行文件
考究命令
objdump -D a.out | less
//将可执行文件a.out 转成汇编语言, less命令是的查看可以上下滚动
richard@rich:~/workspace$ ldd a.out linux-vdso.so.1 (0x00007ffdce762000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa4d24d1000)/lib64/ld-linux-x86-64.so.2 (0x00007fa4d2ac4000)
多文件编译与链接
hello.cpp
#include <cstdio>void hello() {printf("Hello, world\n");
}
main.cpp
#include <cstdio>void hello();int main() {hello();return 0;
}
g++ -c hello.cpp -o hello.o
g++ -c main.cpp -o main.o
g++ hello.o main.o -o a.out
使用 -c 选项指定生成临时的对象文件,再根据一系列对象文件进行链接,得到最终的a.out
如果单独改动hello.cpp文件的话,只需要执行
g++ -c hello.cpp -o hello.o
g++ hello.o main.o -o a.out
Makefile构建系统
make 这个程序,只需写出不同文件之间的依赖关系,和生成各文件的规则
特点
1. 当只更新了hello.cpp时只会重新编译hello.o, 不需要将main.o重新编译
2. 能够自动并行地发起对hello.cpp和main.cpp的编译, 加快编译速度(make -j)
3. 用通配符批量生成构建规则,避免针对每个.cpp和.o重复写 g++ 命令(%.o: %.cpp)
文件结构
richard@rich:~/workspace$ tree
.
├── hello.cpp
├── main.cpp
└── Makefile
Makefile内容,
a.out: hello.o main.og++ hello.o main.o -o a.outhello.o: hello.cppg++ -c hello.cpp -o hello.omain.o: main.cppg++ -c main.cpp -o main.o
执行make
richard@rich:~/workspace$ make
g++ -c hello.cpp -o hello.o
g++ -c main.cpp -o main.o
g++ hello.o main.o -o a.out
无更新执行make
richard@rich:~/workspace$ make
make: 'a.out' is up to date.
相关文章:
C++ > Cmake
目录 编译器 多文件编译与链接 Makefile构建系统 编译器 厂商 C C GNU gcc g main.cpp #include <cstdio>int main() {printf("Hello, world!\n");return 0; }编译器, 是一个根据源代码生成机器码的程序 g main.cpp -o a.out调用编译器程序g, 读…...
Spring的Bean的生命周期
Spring的Bean的生命周期 Spring的Bean的生命周期 Spring的Bean的生命周期 Spring的Bean的生命周期包括以下阶段: (1)实例化Instantiation(2)填充属性Populate properties(3)处理Aware接口的回调…...
在树莓派上搭建WordPress博客网站,并内网穿透发布到公网
✨个人主页:bit me👇 目 录 🐾概述💐安装 PHP🌸安装MySQL数据库🌷安装 Wordpress🍀设置您的 WordPress 数据库🌹设置 MySQL/MariaDB🌻创建 WordPress 数据库 ἳ…...
跨平台C++ Qt数据库管理系统设计与实战:从理论到实践的全面解析
跨平台C Qt数据库管理系统设计与实战:从理论到实践的全面解析 一、引言(Introduction)1.1 数据库管理系统的重要性(Importance of Database Management Systems)1.2 C和Qt在数据库管理系统中的应用(Applica…...
Ubuntu crontab定时任务
1. crontab 相关的命令: 安装:apt-get install cron 启动:service cron start 重启:service cron restart 停止:service cron stop 检查状态:service cron status 查询cron可用的命令:service …...
ChatGPT Prompt Engineering for Developers 大语言模型引导词指导手册
以下内容均整理来自deeplearning.ai的同名课程 Location 课程访问地址 https://learn.deeplearning.ai/chatgpt-prompt-eng 一、Guidelines for Prompting 引导语的编写原则 Prompting Principles 引导语编写原则 Principle 1: Write clear and specific instructions编写清晰…...
【Vue】二:Vue核心处理---模板语法
文章目录 1.模板语法---插值2.模板语法---指令语法2.1v-once2.2 v-bind2.3 v-model2.4 v-on 3.MVVM4.事件回调函数中的this 1.模板语法—插值 {{可以写什么}} (1)在data中声明的变量,函数 (2)常量 (3&…...
windows环境下nginx+ftp服务器搭建简易文件服务器
这里写目录标题 1,前言2,FTP服务器搭建3,nginx安装 1,前言 几种文件服务器的对比 1,直接使用ftp服务器,访问图片路径为 ftp://账户:密码192.168.0.106/31275-105.jpg不采用这种方式,不安全容易…...
【数据结构与算法】图的概述(内含源码)
个人主页:【😊个人主页】 系列专栏:【❤️数据结构与算法】 学习名言:天子重英豪,文章教儿曹。万般皆下品,惟有读书高——《神童诗劝学》 系列文章目录 第一章 ❤️ 学前知识 第二章 ❤️ 单向链表 第三章…...
SAP MM 根据采购订单反查采购申请
如何通过采购订单号查询到其前端的采购申请号。 首先从采购申请的相关报表着手,比如ME5A, 发现它是可以满足需求的。 例如:如下的采购订单, 该订单是由采购申请10003364转过来的。 如果想通过这个采购订单找到对应的采购申请,在…...
C语言程序设计题/C语言计算机二级考前押题版
C语言程序设计题/C语言计算机二级考试押题版 与 数位 和 数 有关 求max与min 任意四个数 运算符和表达式版本 #include <stdio.h> int main( ) {int a,b,c,d;int max,min;printf("please input 4 integers:");scanf("%d%d%d%d", &a, &b, …...
Canonical标签在SEO中重要作用
canonical标签是很多搜索引擎都支持的一个标签,它的作用是标记某一网页的唯一url地址。这样做的目的是保证我们的某一网页在搜索引擎中只有一个唯一的地址。 Canonical标签对于一些入行不久的人来说,可能会有些陌生。但这个标签是很多搜索引擎都支持的标…...
【Linux之进程间通信】06.Linux进程通信 - 共享内存
【Linux之进程间通信】 项目代码获取:https://gitee.com/chenshao777/linux-processes.git (麻烦点个免费的Star哦,您的Star就是我的写作动力!) 06.共享内存 共享内存是Linux进程间的通信方式之一 创建共享内存函数…...
oracle安装
服务端安装(公司中不需要,只安装客户端就行) 1、挂载一个Windows系统 双击vmx文件 启动 2、网络配置 添加一个网络 自己电脑看控制面板是否添加虚拟网卡 查看连接的网络,ip地址不能为1,为1就自己修改,…...
CSS样式的三种引入方式及优先级
说明:网页开发有三种技术,分别是html、css和js,分别对应页面的结构、表现和动作。css样式引入,是指把对页面的渲染作用到html上,有以下三种方式:行内式、内嵌式和外联式。 第一种:行内式&#…...
Linux第二天
上传 scp -r 本地文件路劲 用户名目标主机地址:路径 下载:scp -r 用户名目标主机地址:路径 本地目录 ls -A /root //查看root文件下所有的隐藏文件 命令:ls 选项: -l:查看文件属性 -h:文…...
微服务和领域驱动
一、微服务 1.1 什么是微服务 微服务就是一些协同工作的小而自治的服务。 关键词: 小而自治 -- 小 “小”这个概念,一方面体现在微服务的内聚性上。 内聚性也可以称之为单一职责原则:“把因相同原因而变化的东西聚合到一起,…...
Redis如何做到内存高效利用?过期key删除术解析!
大家好,我是小米,一个热衷于分享技术的小伙伴。今天我要和大家探讨一个关于 Redis 的话题:删除过期key。在使用 Redis 进行数据存储和缓存时,我们经常会遇到过期数据的处理问题。接下来,我将为大家介绍为什么要删除过期…...
EFDC模型教程
详情点击链接:EFDC建模方法及在地表水环境评价、水源地划分、排污口论证 一,软件安装 1.1 EFDC安装 1.2 EFDC-Explorer安装 1.3 Delft3D安装 1.4 Google Earth安装二,EFDC模型 2.1 EFDC模型 2.2 EFDC-DSI模型 2.3 EFDC的…...
URLConnection(三)
文章目录 1. 配置连接2. protected URL url3. protected boolean connected4. protected boolean allowUserInteraction5. protected boolean doInput5. protected boolean doOutput6. protected boolean isModifiedSince7. protected boolean useCaches8. 超时 1. 配置连接 U…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
ubuntu中安装conda的后遗症
缘由: 在编译rk3588的sdk时,遇到编译buildroot失败,提示如下: 提示缺失expect,但是实测相关工具是在的,如下显示: 然后查找借助各个ai工具,重新安装相关的工具,依然无解。 解决&am…...
C/Python/Go示例 | Socket Programing与RPC
Socket Programming介绍 Computer networking这个领域围绕着两台电脑或者同一台电脑内的不同进程之间的数据传输和信息交流,会涉及到许多有意思的话题,诸如怎么确保对方能收到信息,怎么应对数据丢失、被污染或者顺序混乱,怎么提高…...
