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 ...
随机推荐
- RFM - Customer Level Data
Introduction ## Warning: package 'DT' was built under R version 3.5.2 RFM (recency, frequency, monet ...
- SDOI 二轮垫底鸡
SDOI 二轮垫底鸡 day0 准备爆零 没啥好准备考试的,12.00出发,试机敲抄个ntt,在宾馆不知道颓啥. day1 爆零爬山 T1noip的题目也放到省选上. 第一档线段树?肯定不写,直接上1 ...
- 了解Vuex状态管理模式的理解强化指南
1 Vuex是什么呢?它是Vue的状态管理模式,在使用vue的时候,需要在vue中各个组件之间传递值是很痛苦的,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被改变,所有引用该值的地 ...
- nginx架构分析之 事件驱动模型
事件驱动模型 事件驱动模型是实现异步非阻塞的一个手段.事件驱动模型中,一个进程(线程)就可以了. 对于web服务器来说,客户端A的请求连接到服务端时,服务端的某个进程(Nginx worker pro ...
- node解析修改ngix配置文件
主要是通过nginx-conf这个工具. git地址:https://github.com/tmont/nginx-conf 具体用法: npm install -S nginx-conf 安装工具 ...
- 第08组 Alpha冲刺(2/4)
队名 八组评分了吗 组长博客 小李的博客 作业博客 作业链接 组员1李昕晖(组长) 过去两天完成了哪些任务 文字/口头描述 11月17日了解各个小组的进度与难以攻破的地方,与隔壁第七组组长讨论进度发展 ...
- Python3爬取美女妹子图片转载
# -*- coding: utf-8 -*- """ Created on Sun Dec 30 15:38:25 2018 @author: 球球 "&qu ...
- C++ 函数模板print
简述 在知乎看到文章leetcode 的奇怪 println vector 工具,于是手痒自己也写了一个print函数. 因为工作中没有需要写这种代码的情况,所以好久没有写这种代码了,还是挺怀念以前学 ...
- lastlogon
function Get-ADUserLastLogon($userName) { $dcs = Get-ADDomainController -Filter {Name -like "*& ...
- c++ extra qualification
原 c++ extra qualification 2013年01月15日 10:04:52 沈纵情 阅读数 9728 运行代码时候遇到了如下错误: extra qualification ‘Co ...