轻松搞定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
编译:将源文件(.cpp)编译生成目标文件(.o) gcc -c main.cpp -o main.o 链接:将目标文件(.o)生成可执行文件 gcc main.o -o main 合并: gcc main.cpp -o main -lstdc -I 指定头文件目录 -L 指定库文件依赖路径 -l 指明库文件名 查看版本 m…...
【C++之类和对象篇002】
C学习笔记---005 C知识类和对象篇1、类的6个默认成员函数2、构造函数2.1、构造函数的特性2.2、内置类型和自定义类型2.3、什么是默认构造函数? 3、析构函数3.1、什么是析构函数?3.2、析构函数的特性3.3、析构函数的释放顺序 4、拷贝构造函数4.1、什么是拷…...
k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(三)
3.19.切换RKE用户,并做免密登录(三台机器相互免密) 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项目。
演示视频: 基于SSM的疫情期间学生信息管理平台的设计与实现(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…...
LeetCode_20_简单_有效的括号
文章目录 1. 题目2. 思路及代码实现(Python)2.1 栈 1. 题目 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型…...
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 架构大致可分为以下三层: 连接层:负责跟客户…...
[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--大模型、扩散模型
专属领域论文订阅 VX关注{晓理紫},每日更新论文,如感兴趣,请转发给有需要的同学,谢谢支持 如果你感觉对你有所帮助,请关注我,每日准时为你推送最新论文。 为了答谢各位网友的支持,从今日起免费为300名读者提供订阅主题论文服务,只需VX关注公号并回复{邮箱+论文主题}(如…...
Delphi v11 安卓权限申请
问题 Delphi 10.4 的安卓权限申请代码,在 Delphi 11 下面编译无法通过。 原因 原因是里面有几个变量类型的定义有所不同。 procedure TDmBLE.RequestPermissionsResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TAr…...
频谱仿真平台HTZ Communications为私有5G建设铺平道路
韩国的国家监管机构韩国通信委员会(KCA)计划在德思特频谱仿真平台HTZ Communications的支持下加快扩大无线电接入范围,提升全国电信服务的质量和效率。 韩国通信委员会(KCA)在韩国的监管环境中扮演着至关重要的角色&am…...
【高效开发工具系列】PyCharm使用
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
进程终止与进程等待
fork 函数 fork 函数是 Linux 中一个非常重要的函数,它的作用是从已存在的进程中创建一个新进程。这个新进程就是当前进程的子进程。 fork() 函数使用方法:它在头文件 #include <unistd.h> 中,函数原型为 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路径,放置芯片包 2 GPIO 2.1 实验1:LED1-LED8循环亮灭 编辑 2.2 实验2:…...
ELAdmin 部署
后端部署 按需修改 application-prod.yml 例如验证码方式、登录状态到期时间等等。 修改完成后打好 Jar 包 执行完成后会生成最终可执行的 jar。JPA版本是 2.6,MyBatis 版本是 1.1。 启动命令 nohup java -jar eladmin-system-2.6.jar --spring.profiles.active…...
计算机功能简介:EC, NVMe, SCSI/ISCSI与块存储接口 RBD,NUMA
一 EC是指Embedded Controller 主要应用于移动计算机系统和嵌入式计算机系统中,为此类计算机提供系统管理功能。EC的主要功能是控制计算机主板上电时序、管理电池充电和放电,提供键盘矩阵接口、智能风扇接口、串口、GPIO、PS/2等常规IO功能,…...
linux上安装bluesky的步骤
1、设备上安装的操作系统如下: 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青犀视频在与业内伙伴进行项目合作的过程中,针对安防监控可视化视频管理系统EasyCVR视频融合平台在电信运营商项目中的应用,进行了多方面的项目需求沟通。今天我们就该项目沟通为案例,来具体了解一下用户关心度较高的关于视频智能…...
django rest framework 学习笔记2
注意:该文章部分摘抄之百度,仅当做学习笔记供小白使用,若侵权请联系删除! 显示关联表的数据,本示例会显示所有的关联的数据信息 from rest_framework import serializers from .models import Student class StudentM…...
第四篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:pyttsx3自动化脚本经典案例
传奇开心果短博文系列 系列短博文目录Python文本和语音相互转换库技术点案例示例系列 短博文目录前言一、雏形示例代码二、扩展思路介绍三、批量处理文本示例代码四、自定义语音设置示例代码五、结合其他库和API示例代码六、语音交互系统示例代码七、多语言支持示例代码八、添加…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...
未授权访问事件频发,我们应当如何应对?
在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...
