c基础-Makefile
Makefile gcc 测试c编译流程.c->.i->.s->.o->可执行程序
# a.c->a.i->a.s->a.o->a
# .i 文件生成 -E(编译过程在预处理结束) gcc -E a.c -o a.i
# .s 文件生成 -S(编译过程在生成汇编代码结束) gcc -S a.i -o a.s
# .o 文件生成 -c(编译过程在汇编转为二进制后结束,不进行链接 -m32 生成32位汇编代码) gcc -c a.s -o a.o -m32
#可执行文件生成 gcc a.o -o a
a.i: a.c a.h
gcc -E a.c -o a.i
a.s: a.i
gcc -S a.i -o a.s
a.o: a.s
gcc -c a.s -o a.o
a: a.o
gcc a.o -o a
# Makefile 规则: 目标文件:依赖文件 a.i: a.c a.h
# Makefile 变量 变量名=123 $(变量名)
# Makefile 隐含变量
# $* 不包括扩展名的目标文件 a.i:a.c a.h $*=a
# $@ 包括扩展名的全部目标文件 a.i:a.c a.h $@=a.i
# $^ 所有的当前条目的依赖文件 a.i:a.c a.h $^=a.c a.h
# $< 第一个依赖文件 a.i:a.c a.h $<=a.c
# Makefile 函数调用 $(函数名 参数)
# $(wildcard *.c) --在当前文件夹下查找所有的.c文件
# $(patsubst %.c,%.o,main.c file.c) --参数 被替换的东西 想要替换成的东西 所有内容
SRC=$(wildcard *.c)
OBJ=$(patsubst %.c, %.o, $(SRC))
CC=gcc
hello:$(OBJ)
$(CC) -o $@ $^
.c.i:
$(CC) -E -o $*.i $<
# # .i.s 隐含规则 相当于 %.s:%.i
.i.s:
$(CC) -S -o $*.s $<
.s.o:
$(CC) -c -o $*.o $<
.c.o:
$(CC) -c -o $*.o $<
#伪指令 后面的命令不进行依赖检查
.PHONY: clean
clean:
rm -rf *.i *.s *.o hello
test:
echo $(SRC)
echo $(OBJ)
#vars.mk 调试变量 make -f Makefile -f var.mk OBJ
%:
@echo '$*=$($*)'
d-%:
@echo '$*=$($*)'
@echo ' origin = $(origin $*)'
@echo ' value = $(value $*)'
@echo ' flavor = $(flavor $*)'
c基础-Makefile的更多相关文章
- 1-3 编程基础 makefile工程管理
GNU make Linux程序员必须学会使用GNU make来构建和管理自己的软件工程.GNU的make能够使整个工程的编译.链接只需要一个命令就可以完成. makefile make在执行时,需要 ...
- (二)我的Makefile学习冲动&&编译过程概述
前言 一 年轻的冲动 二 学习曲线 1 Makefile基本语法 2 bash基础 3 world 三 编译过程概述 1 主机预装工具 2 编译host工具 3 编译交叉工具链 4 编译内核模块 5 ...
- Makefile 跟着走快点
引言 - 从"HelloWorld"开始 Makefile 是Linux C 程序开发最重要的基本功. 代表着整个项目编译和最终生成过程.本文重点是带大家了解真实项目中那些简易的 ...
- 《Linux内核设计与实现》CHAPTER17阅读梳理
<Linux内核设计与实现>CHAPTER17阅读梳理 [学习时间:3.5hours] [学习内容:设备类型,模块,内核对象,sysfs] 个人思考部分见[]标出的部分 一.课堂讲解整理& ...
- 20135220谈愈敏Linux Book_17
第17章 设备与模块 关于设备驱动和设备管理的四种内核成分: 设备类型:在所有 Unix 系统中为了统一普通设备的操作所采用的分类. 模块: Linux 内核中用于按需加载和卸载目标码的机制. 内核对 ...
- 《Linux课本》读书笔记 第十七章 模块
设备与模块: 设备类型:块设备(blkdev).字符设备(cdev).网络设备: 模块: 分析hello,world模块代码.Hello_init是模块的入口点,通过module_init()注册到系 ...
- Android中添加自己的模块 【转】
本文转载自:http://wallage.blog.163.com/blog/static/17389624201021791333695/ 转:http://blog.csdn.net/yili_x ...
- Linux学习二:Makefile基础
文首感谢http://www.chinaunix.net 作者:gunguymadman的分享 makefile关系到了整个工程的编译规则.一个工程中的源文件不计数,其按类型.功能.模块分别放在若干个 ...
- Linux平台Makefile文件的编写基础入门(课堂作业)
根据老师的要求,写一个超简单的makefile准备: 准备三个文件:file1.c, file2.c, file2.h file1.c: #include "file ...
- Linux平台Makefile文件的编写基础篇(转)
目的: 基本掌握了 make 的用法,能在Linux系统上编程.环境: Linux系统,或者有一台Linux服务器,通过终端连接.一句话:有Linux编译环境.准备: ...
随机推荐
- 【PyQt5学习-02-】PyQt5 库的结构
1.pyqt5模块 pyqt5模块(module)文档 https://www.riverbankcomputing.com/static/Docs/PyQt5/module_index.html q ...
- C#判断一个字符串是否为整数
判断一个字符串是否为数字 使用int.TryParse()方法 利用int类型自带的TryParse(string, ou int) 方法可以解决问题,此方法通过对应的输入内容string,如果是 ...
- selenium用executeAsyncScript执行异步脚本调用callback使用方法
executeAsyncScript的作用: 就是把异步的js过程变成java同步的形式,方便java程序及时的接收到同步数据 1.cmdriver.manage().timeouts().scrip ...
- bootstrapTable的一些属性
url : 'firmSoftTable.action', // 请求后台的URL(*) method : 'post', // 请求方式(*)post/get contentType: " ...
- LinuxK8S集群搭建三(部署dashboard)
系统环境: CentOS 7 64位 准备工作: 通过虚拟机创建三台CentOS服务器,可参照之前的文章192.168.28.128 --master192.168.28.130 --node0119 ...
- SAP BW/4HANA 听课笔记
BW/4HANA听课笔记 1.本地SQL,BW/4HANA对象和HANA VIEW互相访问: 2.高级分析功能数据分析预测: 3.InfoOjbect:Characteristics(维度),Key ...
- vue3 h函数
1. 自定义指令(withDirectives 仅可在setup或render函数中使用)可以使用 withDirectives 将自定义指令应用于 VNode: const { h, resolve ...
- CryptoKit 实现 椭圆曲线ECC加密
1.有没有一种方式让两个人的对话绝对安全呢?答案是肯定有的 那就是使用 椭圆曲线ECC加密 2.椭圆曲线ECC加密原理 假设有两个用户A和B .A随机生成一个密码对包含了公钥和私钥 同理B也随机生成一 ...
- PHP压缩二进制流转CSV文件
接口返回的数据是二进制流,需先BASE64解码,再进行解压缩,压缩的文件格式为ZIP,需使用Inflater进行解压,即可得到文件. java demo: 转成PHP代码: 贴上 原始二进制流数据,需 ...
- MYSQL --存储引擎的对比
主要介绍三种 InnoDB .MyISAM .Memory 一.InnoDB 介绍: InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后默认的存储引擎 特点: DML操作遵循 ...