Linux开发工具之Makefile(下)
来源:互联网 发布:淘宝上的shockabsorber 编辑:程序博客网 时间:2024/05/17 01:55
二、Makefile(下)
01.make常用内嵌函数
函数调用
$(function arguments)
$(wildcard PATTERN)
当前目录下匹配模式的文件
例如:src=$(wildcard *.c)
$(patsubst PATTERN,REPLACEMENT,TEXT)
模式替换函数
例如:$(patsubst %.c,%.o,$src)
等价于$(src:.c=.o)
shell函数
执行色狼来了命令
例如:$(shell ls -d */)
#ls
Makefile
02.多级目录Makefile
#touch main.c
#mkdir bll(应用逻辑层)
#mkdir ui(界面层)
#mkdir dal(数据逻辑层)
#cd ui
#touch ui.h ui.c
#cd ..
#cd dll
#touch dal.h dal.c
#cd ..
#cd bll
#touch bll.h bll.c
#ls
bll dll Makefile ui
#vi Makefile (有二级目录)
CC= gcc
CFLAGS=-Wall -g
BIN= main
SUBDIR= $(shell ls -d */)(当前目录下的所有文件夹)
ROOTSRC= $(wildcard *.c)(当前目录下的所有*.c文件)
ROOTOBJ= $(ROOTSRC:%.c=%.o)
SUBSRC= $(shell find $(SUBDIR) -name '*.c')
SUBOBJ= $(SUBSRC:%.c=%.o)
$(BIN):$(ROOTOBJ) $(SUBOBJ)
$(CC) $(CFLAGS) -o $(BIN) $(ROOTOBJ) $(SUBOBJ)
.c.o:
$(CC) $(CFLAGS) -o $< -o $@
clean:
rm -f $(BIN) $(ROOTOBJ) $(SUBOBJ)
#ls -d */(列出该目录下的文件夹都列出来)
#find bll dll ui -name '*.c'
bll/bll.c
dll/dll.c
ui/ui.c
#make
#makeclean
#ls
03.Makefile可能生成多个可执行文件,如何只生成一个可执行文件
#vi Makefile
SUBDIRS = test1 test2
.PHONYL:default all clean $(SUBDIRS)
default:all
all clean:
$(MAKE) $(SUBDIRS) TARGET=$@
$(SUBDIRS):
$(MAKE) -C $@ $(TARGET)
#cd . ./test1
#vi Makefile
CC= gcc
BIN= test1
OBJS= test1.o
.PHONY: all clean print
all:print $(BIN)
print @echo "----make all in $(PWD)----"
$(BIN):$(OBJS)
$(CC) $(OBJS) -o $@
%.o:%.c
$(CC) $(OBJS) -o $@
%.o:%.c
$(CC) -c $<
clean:
@echo "---- make clean in $(PWD) ----"
rm -f $(BIN) $(OBJS)
#cd ../test2
#ls
#vi Makefile
CXX= g++(实现C++的编译)
BIN= test2
OBJS= test2.o
CPPFLAGS=-Wall -g
.PHONY: all clean print
all:print $(BIN)
@echo "---- make all in $(PWD) ----"
$(BIN):$(OBJS)
$(CXX) $(OBJS) -o $@
.o:%.cpp
$(CXX) -c $<
clean:
@echo "---- make clean in $(PWD) ----"
rm -f $(BIN) $(OBJS)
如果子目录下存在文件夹,也可以采用与顶层目录的Makefile类似的写法
,实现多级目录,可扩展的方法。
0 0
- Linux开发工具之Makefile(下)
- Linux开发工具之Makefile(上)
- Linux下项目开发工具(gcc,makefile,git)
- linux环境开发工具之makefile文件
- 浅析Linux开发工具之Makefile
- linux下开发之makefile文件
- Linux开发工具之gdb(下)
- 用C++语言做Linux开发工具之粘合剂Makefile
- 用C++语言做Linux开发工具之粘合剂Makefile
- Linux c 开发 - Makefile工具
- linux之Makefile(下)
- Linux下C语言开发之Makefile创建
- Linux下Makefile生成工具automake使用
- Linux 开发工具 ---gcc makefile gdb
- linux下的C语言开发(makefile编写)
- linux下的C语言开发(makefile编写)
- linux下的C语言开发(makefile编写)
- linux下的C语言开发(makefile编写)
- 3-8[attribute!=value]属性选择器
- Linux开发工具之gcc
- Linux shell入门基础(八)
- GenyMotion不能启动的问题,Unable to start the virtual device.VirtualBox cannot start the virtual device
- Linux开发工具之Makefile(上)
- Linux开发工具之Makefile(下)
- Linux开发工具之gdb(上)
- Linux开发工具之gdb(下)
- WebService学习总结 四 WebService开发天气预报客户端程序
- CentOS 7 mount ntfs格式的u盘(转发)
- mybatis高级映射总结
- CrackingtheCodeInterview之栈与队列
- 数据结构复习——二叉树的几个基本操作
- 超链接的练习题