轻松搞定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示例代码六、语音交互系统示例代码七、多语言支持示例代码八、添加…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
