Makefile 例子和分析
来源:互联网 发布:奥运知识知多少 编辑:程序博客网 时间:2024/05/29 17:16
DIR_SRC=./src
DIR_OBJ=./obj
DIR_BIN=./bin
SRC=$(wildcard ${DIR_SRC}/*.c)
OBJ=$(patsubst %.c,${DIR_OBJ}/%.o,$(notdir ${SRC}))
TARGET=main
BIN_TARGET=${DIR_BIN}/${TARGET}
CC=gcc
CFLAGS = -g -Wall -I${DIR_INC}
${BIN_TARGET}:${OBJ}
$(CC) $(OBJ) -o $@
${DIR_OBJ}/%.o:${DIR_SRC}/%.c
$(CC) $(CFLAGS) -c $< -o $@
.PHONY:clean
clean:
find ${DIR_OBJ} -name *.o -exec rm -rf {}
解释如下:
(1)Makefile中的 符号 $@, $^, $< 的意思:
$@ 表示目标文件
$^ 表示所有的依赖文件
$< 表示第一个依赖文件
$? 表示比目标还要新的依赖文件列表
(2)wildcard、notdir、patsubst的意思:
wildcard : 扩展通配符
notdir : 去除路径
patsubst :替换通配符
例如下图例子所示:
输出结果如下所示:
SRC = $(wildcard *.c)
等于指定编译当前目录下所有.c文件,如果还有子目录,比如子目录为inc,则再增加一个wildcard函数,象这样:
SRC = $(wildcard *.c) $(wildcard inc/*.c)
(3)gcc -I -L -l的区别:
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld
上面这句表示在编译hello.c时-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,
寻找的顺序是:/home/hello/include-->/usr/include-->/usr/local/include
-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,
寻找的顺序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib
-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件)
- Makefile 例子和分析
- sdcc和Makefile的例子
- 如何自动产生makefile(例子分析)
- 两个个makefile例子的分析
- Kconfig和Makefile的编写例子
- Makefile例子
- makefile例子
- Makefile 例子
- makefile例子
- Makefile 例子
- MakeFile例子
- Makefile例子
- Makefile 例子
- makefile例子
- makefile例子
- Makefile 例子
- Makefile例子
- Makefile例子
- 第六章 参数估计
- 多字节字符与宽字节字符
- 错误: 找不到或无法加载主类 Action.AAA
- java设计模式-命令模式
- 使用remi源报错:epel-release >= 6 is needed by remi-release-6.5-1.el6.remi.noarch
- Makefile 例子和分析
- 工厂模式
- 1116 四色问题
- vim 的使用
- mqtt服务端mosquitto的安装和使用
- FTP传输文件的两种方式
- 第24课:彻底解密Shuffle是如何成为Spark性能杀手的及调优点思考
- 第七届蓝桥杯决赛真题
- phpstorm的使用方法