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 ...
随机推荐
- ES6 String和Number扩展
一.String 扩展 ①传统上,JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中.ES6 又提供了三种新方法. includes():返回布尔值,表示是否 ...
- 【Beta】Scrum Meeting 9 & 助教参会记录
目录 前言 任务分配 燃尽图 会议照片 签入记录 上周助教交流总结 Q:项目进度如何? Q:有关commit与issue关联的问题? Q:人员变动后分工的变化情况? Q:接下来还有什么新功能? Q:大 ...
- MAC OS系统替换homebrew使用阿里云或中科大的镜像源
阿里云镜像 # 替换brew.git: cd "$(brew --repo)" git remote set-url origin https://mirrors.aliyun.c ...
- 用Python实现一个简单的——人脸相似度对比
近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等.总体来说,AI的门槛还是比较高,不仅要学会使用框架实现,更重要的是,需要有一定的数学基础 ...
- 微信小程序支付接口之Django后台
本文链接:https://blog.csdn.net/qq_41860162/article/details/89098694Python3-django-微信小程序支付接口调用工具类生成一系列微信官 ...
- 【PHP】php实现二进制、八进制、十进制、十六进制之间各自转换的函数
<?php /* 常见的进制: 二进制 binary -----> bin 八进制 octal -----> oct 十进制 decimal -----> dec 十六进制 h ...
- 笔记-JFB:业务流程梳理
ylbtech-笔记-JFB:业务流程梳理 1.家政员找工作-->填写基本信息-->上岗申请--> 1.返回顶部 1. 2. 2. 2.返回顶部 3.返回顶部 4.返回顶部 ...
- jQuery-webcam使用
基本页面 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...
- 支付宝小程序开发——H5跳转到小程序(获取小程序页面的链接)
前言: 这个问题支付宝小程序官方文档并没有专门说明,钉钉群的官方技术支持给了个开发者社区的帖子,详见:如何跳转小程序. 如果配置的页面没有参数还好,不会出问题,如果有参数,很可能配出来的链接无法正常获 ...
- Python 多进程爬虫实例
Python 多进程爬虫实例 import json import re import time from multiprocessing import Pool import requests f ...