Chinaunix首页 | 论坛 | 博客
  • 博客访问: 527359
  • 博文数量: 68
  • 博客积分: 2501
  • 博客等级: 大尉
  • 技术积分: 713
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-07 17:49
个人简介

文章分类

全部博文(68)

分类: LINUX

2010-04-22 21:55:20

1.多C文件生成各自可执行文件的Makefile
如果一个目录下有很多C文件,且每个C文件都能生成一个独立的可执行文件,那么想全编译这些C文件并生成各作的可执行文件,在该目录下编写一个Makefile文件,就能做到时。
#定义所需变量
C = gcc
CFLAGS = -Wall -O -g -o #编译链接-o
SRCS =$(wildcard *.c)
OBJS =$(patsubst %.c,%,$(SRCS))
.PHONY:all clean
all:$(OBJS)
%:%.c
        $(CC) $(CFLAGS) $@ $<
clean:
        rm -f $(OBJS)
执行make,得到:
cc -Wall -O -g -o hello hello.c
gcc -Wall -O -g -o unixio unixio.c
...  ...
 
2.多C文件生成一个可执行文件的Makefile
一个由多个C文件编写的程序,如果不使用Makefile而一个一个输入命令来编译成目标文件,再把这些目标文件链接成一个可执行文件,那将是很麻烦的事情。而Makefile就能把所有的编译,链接规则集合起来,形成一个Makefile格式的文件,由GUN make来执行这些规则。这里提供一种多C文件程序的Makefile写法,你只需定义相关变量,就能轻松完成程序的编译,链接,最终生成一个可执行文件。
设所有的C程序程序存放在myapp目录下,最终生一个目录可执行文件app,Makefile的写法如下
#定义所需变量
CC=gcc
LD=gcc
CFLAGS=-c -Wall -O -g
LDFLAGS=-o
#生成的可执行文件为app,设定目标文件名
TARGET=app
SRCS=$(wildcard *.c)
OBJS=$(patsubst %c,%o,$(SRCS))
#设定all,clean为伪目标
.PHONY:all clean
all:$(TARGET)
$(TARGET):$(OBJS)
 $(LD) $(LDFLAGS) $(TARGET) $^
#-o 选项之后应该加上生成的可执行文件名,再接上所需的目标文件
#例如:gcc -o myapp abc.o bcd.o,不然出错了还难于发现,
%.o:%.c
 $(CC) $(CFLAGS) $<
clean:
 rm -f *.o $(TARGET)
执行make编译,得到
gcc -c -Wall -O -g hello.c
gcc -c -Wall -O -g main.c
... ...
gcc -o app hello.o main.o ...
执行make clean清除目标文件和和可执行文件
注:用.PHONY:all clean表明all clean为伪目标,当有源文件修改后,重新make时,只编译更改过的文件。

文章参考
阅读(3219) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~