学习Makefile
1> 编译一个文件
2> 编译多个文件
3> 编译多个目录下的文件
4> inclue makefile
5> 使用规则
1>
target:depend
[tab]cmd
depnd:file
[tab]cmd
举例如下
test:main.o
[tab]gcc -o test main.o
main.o:main.c
[tab]gcc -o main.o -c main.c
2>
2.1 目标文件依赖多个文件
CC = gcc #INC = -I./include/
#LIBVAR = -lpthread
#LIBPATH = -L./lib #CFLAGS ?= -O2 -g OBJS := main.o
OBJS += add.o
OBJS += sub.o SRCS := main.c
SRCS += add.c
SRCS += sub.c
TARGET = test $(TARGET):$(OBJS)
$(CC) $(INC) $(CFLAG) -o $@ $^ $(LIBVAR) $(LIBPATH)
@echo "build success" $(OBJS):$(SRCS)
$(CC) $(INC) $(CFLAG) -c $^ $(LIBVAR) $(LIBPATH) clean:
rm -rf $(OBJS) $(TARGET) install:
@echo "do nothing"
2.2 生成多个目标文件,我们可使用伪目标
CC = gcc #INC = -I./include/
#LIBVAR = -lpthread
#LIBPATH = -L./lib
#CFLAGS ?= -O2 -g
#SRCS = OBJS := hello.o
OBJS += test.o TARGET = test hello all:$(TARGET)
@echo "success to build"
test:test.c
$(CC) $(INC) $(CFLAGS) -o $@ $^ $(LIBVAR) $(LIBPATH) hello:hello.c
$(CC) $(INC) $(CFLAGS) -o $@ $^ $(LIBVAR) $(LIBPATH) clean:
rm -rf $(OBJS) $(TARGET) install:
@echo "do nothing"
$@ 表示目标文件
$^ 表示所有依赖项
$< 表示第一个文件
简化makefile 如下:
CC = gcc #INC = -I./include/
#LIBVAR = -lpthread
#LIBPATH = -L./lib
#CFLAGS ?= -O2 -g
#SRCS = #wildcard对.c文件进行展开
SRCS = $(wildcard ./*.c) OBJS = $(patsubst %.c, %.o, $(SRCS)) #将SRCS中后缀.c替换成空,即可执行程序的名字与c名字相同
TARGET = $(patsubst %.c, %, $(SRCS)) all:$(TARGET)
@echo "success to build" $(TARGET):$(OBJS)
gcc $< -o $@ $(OBJS):$(SRCS)
gcc -c $< clean:
rm -rf $(OBJS) $(TARGET) install:
@echo "do nothing"
学习Makefile的更多相关文章
- 一个工程实例来学习 Makefile
March 3, 2015 8:19 PM Makefile 文件的编写 学习前的准备 需要准备的工程目录结构如下: . ├── add │ ├── add_float.c │ ├── add ...
- 学习makefile与autoconfig笔记,持续更新
main.c #include<stdio.h> #include"chen_print.h" int main(int argc , char * argv ){ c ...
- 学习makefile的一个工程示例
前言 makefile推荐资料为陈皓的跟我一起写makefile,需要pdf资源的可以私我 正文 工程目录结构 ---include(放置头文件.h) ------student.h(Student类 ...
- [arm学习]makefile学习总结
makefile不仅仅是一个命令的集合体,其中有一些规则是需要理解掌握的. 首先,了解makefile的规则: //-----------格式---------- 目标 : 依赖1,依赖2 (TAP键 ...
- 一个小例子学习makefile
前言 makefile推荐资料为陈皓的跟我一起写makefile,需要pdf资源的可以私我 正文 目录结构 ---include ------student.h ---src ------studen ...
- 学习makefile 的网址
http://www.ruanyifeng.com/blog/2015/02/make.html http://blog.csdn.net/ruglcc/article/details/7814546 ...
- [转]Windows平台下Makefile学习笔记
Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...
- (二)我的Makefile学习冲动&&编译过程概述
前言 一 年轻的冲动 二 学习曲线 1 Makefile基本语法 2 bash基础 3 world 三 编译过程概述 1 主机预装工具 2 编译host工具 3 编译交叉工具链 4 编译内核模块 5 ...
- 学习笔记:Makefile的ifeq逻辑或,逻辑与的变通实现
(1)ifeq的用法 ifeq ($(变量名), 变量值 ) ........ else ifeq ($(..), ..) ......... else ......... endif (2) ...
随机推荐
- STM32-cJSON库的打包和解析
这几天使用了一下JSON在STM32103平台上的使用,还是很好用的,在此记录下. JSON是啥我也不总结了,就是直观的看起来是一个有格式的字符串,看起来非常清楚明白,有点像Python中的dicit ...
- 【原创】大叔经验分享(46)用户提交任务到yarn报错
用户提交任务到yarn时有可能遇到下面的错误: 1) Requested user anything is not whitelisted and has id 980,which is below ...
- mysql修改字符集
文章链接:https://www.cnblogs.com/hubavyn/p/4359315.html mysql修改表.字段.库的字符集(转) 原文链接:http://fatkun.com/2011 ...
- RabbitMQ可靠性投递及高可用集群
可靠性投递: 首先需要明确,效率与可靠性是无法兼得的,如果要保证每一个环节都成功,势必会对消息的收发效率造成影响.如果是一些业务实时一致性要求不是特别高的场合,可以牺牲一些可靠性来换取效率. 要保证消 ...
- java 根据Url下载对应的文件到指定位置,读txt文件获取url
package test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...
- CSS选择器权重计算
CSS各种选择器的权重: 1.ID选择器 +100 2.类.属性.伪类选择器 +10 3.元素.伪元素选择器 +1 4.其他选择器 +0 如果有两个CSS样式都作用于某元素,如: #id ...
- SpringBoot系列二:SpringBoot自动配置原理
主程序类的注解 @SpringBootApplication 注解,它其实是个组合注解,源码如下: @Target({ElementType.TYPE}) @Retention(RetentionPo ...
- ERROR: invalid byte sequence for encoding "UTF8": 0x00
1.使用kettle批量导入数据的时候,数据出现了下面的错误.ERROR: invalid byte sequence for encoding "UTF8": 0x00 关键点: ...
- [转] 微信小程序页面间通信的5种方式
微信小程序页面间通的5种方式 PageModel(页面模型)对小程序而言是很重要的一个概念,从app.json中也可以看到,小程序就是由一个个页面组成的. 如上图,这是一个常见结构的小程序:首页是一个 ...
- 使用EasyNetQ简化RabbitMQ操作
关于具体的操作看查看官方文档:https://github.com/EasyNetQ/EasyNetQ 也可以参考中文翻译版本:http://www.cnblogs.com/HuangLiang/p/ ...