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

轻松搞定Makefile

编译:将源文件(.cpp)编译生成目标文件(.o)
gcc -c main.cpp -o main.o

链接:将目标文件(.o)生成可执行文件
gcc main.o -o main

合并:
gcc main.cpp -o main -lstdc++

-I 指定头文件目录
-L 指定库文件依赖路径
-l 指明库文件名

查看版本
make --version

Makefile
方式一:
target:
g++ -I. add.cpp sub.cpp main.cpp -o main

target:目标名称,可以随意命名
g++ 前面不是空格,必须是tab缩进
Makefile 里如果有多个目标,可以通过make加目标名称来执行指定的
目标,如果不是指定目标,则默认选择第一个目标执行
make target 也可以直接输入make

方式二:
target: main

main:g++ -I. add.cpp sub.cpp main.cpp -o main

注意:
"target: main"表示target目标依赖main目标
main为目标名称,可以随意命名

方式三:
target: add_o sub_o main_o main

main:g++ -I. add.o sub.o main.o -o mainadd_o:g++ -I. -c add.cpp -o add.osub_o:g++ -I. -c sub.cpp -o sub.omain_o:g++ -I. -c main.cpp -o main.o

注意:
依赖顺序,如果main 放前面存在找不到.o文件的错误

升级写法
模式规则
Makefile
target: add_o sub_o main_o main

main:g++ -I. add.o sub.o main.o -o main%.o: %.cppg++ -I. -c $< -o $@

说明:
%.o: %.cpp:所有的.o文件都由相同名称的.cpp文件编译生成
<:表示所有依赖的挨个值
@:表示所有目标的挨个值
这些奇怪的变量"<“、”@“我们叫"自动化变量”

变量替换
Makefile
OBJS = add_o sub_o main_o

target: ${OBJS} mainmain:g++ -I. ${OBJS} -o main%.o: %.cppg++ -I. -c $< -o $@clean:rm -rf ${OBJS} main

高级写法
文件过滤
Makefile

#找出当前目录下,所有的源文件(以.cpp结尾)
SRCS := ${shell find ./* -type f | grep '\.cpp'}
${warning SRCS is ${SRCS}}#确定cpp源文件对应的目标文件
OBJS := ${patsubst %.cpp, %.o, ${filter %.cpp, ${SRCS}}}
${warning OBJS is ${OBJS}}target: ${OBJS} mainmain:g++ -I. ${OBJS} -o main%.o: %.cppg++ -I. -c $< -o $@clean:rm -rf ${OBJS} main

编译选项
CFLAGS := -g -o2 -Wall -Werror -Wno-unused -ldl -std=c++11

静态库
./lib/libmul.a:${MUL_SRC:%.cpp=%.o}
ar rs $@ $^

动态库
./lib/libmul.so:${MUL_SRC:%.cpp=%.o}
gcc -I. -fPIC -shared -c $< -o $@

通过环境变量LD_LIBRARY_PATH来指定动态库查找目录
export LD_LIBRARY_PATH=./lib

CROSS =
#CROSS=/root/gcc-linaro-5.3.1-2016.05-i686_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
CC = $(CROSS)gcc
CXX = $(CROSS)g++WORKDIR =/mnt/hgfs/Share/SOURCE/
#INSTALLPATH =/home/FCloudComm_jlx/
INSTALLPATH =/home/FCloudComm/
COMPILETYPE =26_
DDIRNAME =TRA_SHUILI_SDIDEBUG =
CXXFLAGS = $(DEBUG) -Wall -fPIC -shared -I. -I$(WORKDIR) -I$(WORKDIR)include -I$(WORKDIR)Source -L$(INSTALLPATH)bin -lDeliverDriverST -lServiceAPI -ldl -lpublicVERSION = 7.0.0.261
DRIVER = $(INSTALLPATH)delivers/$(DDIRNAME)/
TARGET = $(DRIVER)lib$(COMPILETYPE)$(DDIRNAME).so.${VERSION}DIRS = .
FILES = $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cpp))
OBJS = $(patsubst %.cpp, %.o, $(FILES))OTHERFILES = ./sqlite3.c
OTHEROBJS = $(patsubst %.c, %.o, $(OTHERFILES))$(TARGET): $(OBJS) $(OTHEROBJS)$(CXX) $(OBJS) $(OTHEROBJS) $(CXXFLAGS) -o $@
#	cp -rf ../../xml/$(DDIRNAME).xml $(DRIVER)$(OBJS):%.o:%.cpp$(CXX) -c $< -o $@ $(CXXFLAGS)$(OTHEROBJS):%.o:%.c$(CC) -c $< -o $@ $(CXXFLAGS).PHONY: clean
clean:$(RM) $(TARGET)$(RM) $(OBJS)$(RM) $(OTHEROBJS)

相关文章:

轻松搞定Makefile

编译&#xff1a;将源文件(.cpp)编译生成目标文件(.o) gcc -c main.cpp -o main.o 链接&#xff1a;将目标文件(.o)生成可执行文件 gcc main.o -o main 合并&#xff1a; gcc main.cpp -o main -lstdc -I 指定头文件目录 -L 指定库文件依赖路径 -l 指明库文件名 查看版本 m…...

【C++之类和对象篇002】

C学习笔记---005 C知识类和对象篇1、类的6个默认成员函数2、构造函数2.1、构造函数的特性2.2、内置类型和自定义类型2.3、什么是默认构造函数&#xff1f; 3、析构函数3.1、什么是析构函数&#xff1f;3.2、析构函数的特性3.3、析构函数的释放顺序 4、拷贝构造函数4.1、什么是拷…...

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(三)

3.19.切换RKE用户&#xff0c;并做免密登录&#xff08;三台机器相互免密&#xff09; su rke cd~ ssh-keygen[rkemaster.ssh]$ssh-copy-id rkeslaver2 [rkemaster.ssh]$ssh-copy-id rkeslaver1 [rkemaster.ssh]$ssh-copy-id rkemaster3.20.搭建RKE集群 为了方便理解&#…...

基于SSM的疫情期间学生信息管理平台的设计与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的疫情期间学生信息管理平台的设计与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…...

LeetCode_20_简单_有效的括号

文章目录 1. 题目2. 思路及代码实现&#xff08;Python&#xff09;2.1 栈 1. 题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型…...

gRPC 备查

简介 HTTP/2 HTTP/2 的三个概念 架构 使用流程 gRPC 的接口类型 1.单一RPC 2.服务器流式RPC 3.客户端式流式RPC 4.双向流式RPC...

MySQL 基础知识(十)之 MySQL 架构

目录 1 MySQL 架构说明 2 连接层 3 核心业务层 3.1 查询缓存 3.2 解析器 3.3 优化器 3.4 执行器 4 存储引擎层 5 参考文档 1 MySQL 架构说明 下图是 MySQL 5.7 及其之前版本的逻辑架构示意图 MySQL 架构大致可分为以下三层&#xff1a; 连接层&#xff1a;负责跟客户…...

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--大模型、扩散模型

专属领域论文订阅 VX关注{晓理紫},每日更新论文,如感兴趣,请转发给有需要的同学,谢谢支持 如果你感觉对你有所帮助,请关注我,每日准时为你推送最新论文。 为了答谢各位网友的支持,从今日起免费为300名读者提供订阅主题论文服务,只需VX关注公号并回复{邮箱+论文主题}(如…...

Delphi v11 安卓权限申请

问题 Delphi 10.4 的安卓权限申请代码&#xff0c;在 Delphi 11 下面编译无法通过。 原因 原因是里面有几个变量类型的定义有所不同。 procedure TDmBLE.RequestPermissionsResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TAr…...

频谱仿真平台HTZ Communications为私有5G建设铺平道路

韩国的国家监管机构韩国通信委员会&#xff08;KCA&#xff09;计划在德思特频谱仿真平台HTZ Communications的支持下加快扩大无线电接入范围&#xff0c;提升全国电信服务的质量和效率。 韩国通信委员会&#xff08;KCA&#xff09;在韩国的监管环境中扮演着至关重要的角色&am…...

【高效开发工具系列】PyCharm使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

进程终止与进程等待

fork 函数 fork 函数是 Linux 中一个非常重要的函数&#xff0c;它的作用是从已存在的进程中创建一个新进程。这个新进程就是当前进程的子进程。 fork() 函数使用方法&#xff1a;它在头文件 #include <unistd.h> 中&#xff0c;函数原型为 pid_t fork(void); 用一个…...

MySQL 基础知识(六)之数据查询(二)

目录 6 数值型函数 7 字符串函数 8 流程控制函数 9 聚合函数 10 分组查询 (group by) 11 分组过滤 (having) 12 限定查询 (limit) 13 多表查询 13.1 连接条件关键词 (on、using) 13.2 连接算法 13.3 交叉连接 (cross join) 13.4 内连接 (inner join) 13.5 外连接 …...

蓝桥杯嵌入式STM32G431RBT6知识点(主观题部分)

目录 1 前置准备 1.1 Keil 1.1.1 编译器版本及微库 1.1.2 添加官方提供的LCD及I2C文件 1.2 CubeMX 1.2.1 时钟树 1.2.2 其他 1.2.3 明确CubeMX路径&#xff0c;放置芯片包 2 GPIO 2.1 实验1&#xff1a;LED1-LED8循环亮灭 ​编辑 2.2 实验2&#xff1a…...

ELAdmin 部署

后端部署 按需修改 application-prod.yml 例如验证码方式、登录状态到期时间等等。 修改完成后打好 Jar 包 执行完成后会生成最终可执行的 jar。JPA版本是 2.6&#xff0c;MyBatis 版本是 1.1。 启动命令 nohup java -jar eladmin-system-2.6.jar --spring.profiles.active…...

计算机功能简介:EC, NVMe, SCSI/ISCSI与块存储接口 RBD,NUMA

一 EC是指Embedded Controller 主要应用于移动计算机系统和嵌入式计算机系统中&#xff0c;为此类计算机提供系统管理功能。EC的主要功能是控制计算机主板上电时序、管理电池充电和放电&#xff0c;提供键盘矩阵接口、智能风扇接口、串口、GPIO、PS/2等常规IO功能&#xff0c;…...

linux上安装bluesky的步骤

1、设备上安装的操作系统如下&#xff1a; orangepiorangepi5b:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.2 LTS Release: 22.04 Codename: jammy 2、在用户家目录下创建一个目录miniconda3目录&a…...

视频监控需求八问:视频智能分析/视频汇聚平台EasyCVR有何特性?

最近TSINGSEE青犀视频在与业内伙伴进行项目合作的过程中&#xff0c;针对安防监控可视化视频管理系统EasyCVR视频融合平台在电信运营商项目中的应用&#xff0c;进行了多方面的项目需求沟通。今天我们就该项目沟通为案例&#xff0c;来具体了解一下用户关心度较高的关于视频智能…...

django rest framework 学习笔记2

注意&#xff1a;该文章部分摘抄之百度&#xff0c;仅当做学习笔记供小白使用&#xff0c;若侵权请联系删除&#xff01; 显示关联表的数据&#xff0c;本示例会显示所有的关联的数据信息 from rest_framework import serializers from .models import Student class StudentM…...

第四篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:pyttsx3自动化脚本经典案例

传奇开心果短博文系列 系列短博文目录Python文本和语音相互转换库技术点案例示例系列 短博文目录前言一、雏形示例代码二、扩展思路介绍三、批量处理文本示例代码四、自定义语音设置示例代码五、结合其他库和API示例代码六、语音交互系统示例代码七、多语言支持示例代码八、添加…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...