Linux基础(02)MakeFile的创建和使用
makefile是生成文件的脚本 , 把当前文件下的.c文件生成.o文件和可执行程序
SRC = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SRC))
CC = gcc
FLAG = -g -static
LIB =
DEFS =
INCLUDE =
TARGET = helloworld
$(TARGET):$(OBJS)
$(CC) $(FLAG) $(DEFS) $^ -o $@ $(LIB)
.PHONY:
clean:
rm -rf *.o $(TARGET)
gcc -g hello.c -o hello -g后面是依赖文件 -o后面是要生成的目标文件
gcc -g -o hello hello.c 可以换一下位置效果同上
-c 编译而不链接
-o 生成的文件 .c .i .s .o
-g 生成带字符表的程序
-D 快速控制代码是否执行 和#ifdefine 作用一样
-I 可指定查找include文件的其他位置 如:$cc -c -I/usr/local/include -I/opt/include hello.c
-L 指定链接库的搜索目录 , -l(小写L)指定链接库的名字
-Wall 提升警告
-g后面什么都不加就是动态链接库 -g后面加-static 静态
makefile里面的代码
目标文件:依赖文件
hello.o:hello.c
gcc -g -o hello.o hello.c
#变量
1.定义变量
OBJ = 文件名 不可追加的变量
OBJ := 可追加的变量
OBJ += 追加
2.使用变量
${} 或 $() 使用变量
3.通配符
% * ? % 任意一个 * 全部 ? 匹配 如 1?3 找到123 133 143
$@ 代表目标文件
$^ 代表依赖文件
$< 代表第一个依赖文件
要生成target要依赖于 xxx.o xxxx.o 但是没有.o文件会跳到下一句生成.o再执行生成和target和递归(到来边界才会执行下一句)差不多
object := xxx.o xxxx.o
$(target):$(object)
$(CC) $(FLAG) $^ -o $@
%.o:%.c
$(CC) $(FLAG) $^ -o $@
.PHONY:
clean:
rm -rf *.o $(target)
利用编译器的隐式规则
object := xxx.o xxxx.o
$(target):$(object)
$(CC) $(FLAG) $^ -o $@
.PHONY:
clean:
rm -rf *.o $(target)
4.隐式规则 如果你要生成 .o文件就必须要先 .c -> .i -> .s 才能生成 .o 但是编译器会智能的帮你经过中间的过程
5.函数
//$(函数名 函数参数)如:
SRC = $(wildcard *.c) //wildcard 提取当前文件下面的某个文件
OBJS = $(patsubst %.c,%.o,$(SRC)) //patsubst 字符串替换函数 把SRC里的 .c 替换成.o
CC = gcc
FLAG = -g
DEFS =
LIB = -ltermcap //-lpthread // -L/word/abc.so
INCLUDE=
$(target):$(object)
$(CC) $(FLAG) $^ -o $@ $(LIB)
.PHONY:
clean:
rm -rf *.o $(target)
#多文件makefile的使用
把顶层Makefile, Makefile.build放入程序的顶层目录 , 修改target , 修改obj-y
再在每个子文件里新建一个makefile 把obj-y+=%.o
Linux基础(02)MakeFile的创建和使用的更多相关文章
- Linux基础 -02
3.4 虚拟机快照技术 什么是快照 3.5 虚拟机克隆技术 什么是克隆 4.Bash Shell快速入门 4.1 什么是Bash Shell bash shell是一个命令解释器,主要负责用户程序与内 ...
- 《前端运维》一、Linux基础--02用户与权限
其实说真的,这些基础挺枯燥的,内容呢绝大多数都是些静态的. 上一篇文章我们学习了基本的指令和vim编辑器的操作方法.这篇文章我们主要来学习下Linux中用户的概念和权限相关的知识. 一.用户与用户组 ...
- Linux基础02
** Linux基本操作常用命令(二) ** 用户名与主机名 当你进入Linux终端时,你会看到如下样式的图片: 其中[z@z01]方括号内的z表示当前系统登录操作的用户名,@后的z01表示当 ...
- Linux基础学习-用户的创建修改删除
用户添加修改删除 1 useradd添加用户 添加一个新用户hehe,指定uid为3000,家目录为/home/haha [root@qdlinux ~]# useradd -u 3000 -d /h ...
- Linux基础学习系列目录导航
Linux基础学习-通过VM安装RHEL7.4 Linux基础学习-命令行与图形界面切换 Linux基础学习-基本命令 Linux基础学习-RHEL7.4之YUM更换CentOS源 Linux基础学习 ...
- Linux基础命令-02
Linux基础命令-02:
- Linux基础命令-Nginx-正则表达式( grep sed awk )-Shell Script--etc
Linux基础使用 学习内容博客 内存 查看swap分区信息 > swapon -s 添加swap分区 > mkswap /dev/sdb2 > 激活 swapon -a /dev/ ...
- 全栈必备Linux 基础
Linux 几乎无处不在,不论是服务器构建,还是客户端开发,操作系统的基础技能对全栈来说都是必备的.系统的选择Linux发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行 ...
- 运维之Linux基础(二)
运维之Linux基础(二) 1. file 命令基期用法 2. 文件系统 Linux的文件系统结构是树状结构,所有的文件都在/root跟目录下 /boot:系统启动相关的文件, 如:内核.initrd ...
随机推荐
- A1016 | 磨人的大模拟
这题写得头晕……明天我再评价 #include <stdio.h> #include <memory.h> #include <math.h> #include & ...
- JAVA基础--环境搭建
概况 系统:win10 企业版 IDE:Eclipse 4.7.3 JDK:jdk1.8.0_171 数据库:SQLServer2012 Oracle,未安装MySQL 安装 JDK与开发工具(Ecl ...
- 关于windows10用c++部署libtorch过程中遇到的一些问题
libtorch1.0 vs2017 CMake3.14 windows10 无cuda 用c++调用pytorch模型官网上面有详细教程,也有很多博客,可以参考以下链接:https://blog.c ...
- 前端微服务初试(singleSpa)
1.基本概念 实现一套微前端架构,可以把其分成四部分(参考:https://alili.tech/archive/11052bf4/) 加载器:也就是微前端架构的核心,主要用来调度子应用,决定何时展示 ...
- UDF——已知入口压力和流量计算压降
有时候我们在计算内流,比如管道内的流动时,只知道入口压力和流量,而我们想要计算得到出口的压力,这个应该怎么办呢?当然新版本的Fluent已经自带了流量出口边界,而这里我们采用Fluent的UDF来实现 ...
- mlocate比find快很多的查找命令
mlocate比find快很多的查找命令 使用linux操作系统的人,一般都用过文件查找命令find,在文件数量非常庞大的时候,比如在高通的android工程项目中,目录大小有十几个G,文件数量非常多 ...
- ubuntu16 安装 qBittorrent ( Linux下BT下载图形工具 )
qBittorrent 是QT编写的一款BT下载软件,支持FreeBSD, Linux, macOS, OS/2, Windows: 官网:https://www.qbittorrent.org/ 在 ...
- Git Bash 克隆project
cd 到想要的路径,然后执行下面的命令
- JS的base64编码解码
Unicode问题解法 有个小坑是它只支持ASCII. 如果你调用btoa("中文")会报错: Uncaught DOMException: Failed to execute ' ...
- python初级(302) 5 列表
一.复习 1.函数的创建 1) def关键字 2) 函数名及后面跟随的括号 3)冒号加上函数体 2.函数的调用 函数名及后面跟随的括号 3.带一个,二个,三个参数的函数及调用 二.列表 family ...