makefile的编写规则和示例
来源:互联网 发布:网络工具箱套装 编辑:程序博客网 时间:2024/06/11 23:32
例一:在一个demo目录下有三个目录:分别是test, include, lib test目录下有三个目录,分别是include和source和project,在目录include下有三个文件,分别是a.h,b.h,c.h,在source目录下有三个文件,分别是a.c,b.c,c.c,project目录下放的是makefile文件
include目录下有多个头文件,分别是d.h,m.h, n.h,f.h
lib目录下有多个静态库,分别是:liberr.a,libarm.a
现在a.c包括a.h,b.h,d.h;b.c包括b.h,c.h,m.h,n.h;c.c包括a.h,b.h,c.h
现在要求写一个makefile文件,把.c文件编译成.o文件,并链接静态库,生成的目标文件和可执行文件。
INC_PATH := -I.
/include/
LIB_PATH := -L.
/lib/
LIBS := $(LIB_PATH) -lerr -larm
CC := gcc
LD := g++
CFLAGS := -O2 -Wall $(INC_PATH)
SRC_PATH := .
/source
SOURCE := $(SRC_PATH)
/a
.c\
$(SRC_PATH)
/b
.c\
$(SRC_PATH)
/c
.c
TARGET := target
OBJS := a.o b.o c.o
$(TARGET): $(OBJS)
$(LD) -O2 -o $(TARGET) $(OBJS) $(LIBS)
a.o : $(SRC_PATH)
/a
.c
$(CC) $(CFLAGS) -c -o $@ $<</code>
b.o : $(SRC_PATH)
/b
.c
$(CC) $(CFLAGS) -c -o $@ $<</code>
c.o : $(SRC_PATH)
/c
.c
$(CC) $(CFLAGS) -c -o $@ $<</code>
.PHONY: clean
clean:
-
rm
-f $(OBJS)
$<所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量
会去除重复的依赖目标,只保留一份。这里会自动替换成
$@
目标中模式定义的集合。这里会自动替换成 a.o、b.o 或者 c.o。具体替换成什么,要看他位于哪一条规则下面。
注释的话,可以简单的这么说:
文件主要分3部分;
第一部分就是各种 “:=”的部分,用来声明一些变量,以便于后边使用;
第二部分是从第一部分之后一直到.PHONY之前,有四个重复的小段,每个段的结构都是
1XXX
: YYY 1CMD
1XXX
是 目标, YYY 是 依赖, CMD 是执行的命令。 make
时会自动从上往下执行,找到第一个XXX,监察依赖YYY是否都存在。如果存在,执行CMD命令生成它;否则,找到YYY对应的规则,再递归的运行这个过程。注意CMD前面是一个Tab键,不能是空格。
- 1
最后的clean,是用来执行
make
clean
时用来删除掉编译过程中生成的.o文件
INC_PATH :=-I/opt/local/include
LIBS_PATH :=-L/opt/local/lib
LIBS := -lopencv_imgproc.2.4.9-lopencv_calib3d.2.4.9 -lopencv_contrib.2.4.9 -lopencv_core.2.4.9-lopencv_features2d.2.4.9 -lopencv_highgui.2.4.9-lopencv_legacy.2.4.9
CC := gcc
LD := g++
TARGET := target
OBJS := ct.o run_ct.o
$(TARGET) : $(OBJS)
ct.o : ct.h
run_ct.o : ct.h
.PHONY: claen
claen:
- makefile的编写规则和示例
- makefile示例及编写规则
- Makefile的编写规则
- Makefile.am 编写的语法规则
- Makefile文件编写规则
- Makefile文件编写规则
- Makefile文件编写规则
- Makefile编写规则
- Makefile 编写规则
- Makefile编写规则
- Makefile编写基本规则
- Makefile通用编写规则
- 编写makefile文件规则
- makefile编写规则
- Makefile编写规则
- makefile 文件编写规则
- makefile 编写规则
- 编写Makefile规则
- gcc和g++的区别(转载)
- Mybatis 基础教程之一--基本用法
- makefile文件的编写(转载)
- 2017-06-28一次奇怪的慢问题诊断ERROR_INTERNET_CONNECTION_RESET
- cmake和make区别(转载)
- makefile的编写规则和示例
- cpu和内存的关系
- Makefile.am, Makefile.in&nb…
- 开机出现checking file system on硬盘自检【Win7】--已实践
- C++中,两个头文件互相引用(转载)
- Mat基础
- Mat函数
- OpenCV中构造Mat矩阵赋值和复制的…
- #ifdef __cplusplus ext…