首页  ·  知识 ·  基础设施
批量编译目录下文件的Makefile
网友  中国IT实验室 http://linux.chinaitlab.com/c/806586.html  数据中心  编辑:德仔   图片来源:网络
1.在存放.c文件的目录下编按如下方法编写Makefile文件:   #Makefile start..   CC := gcc #根据需要添加其它如
1.在存放.c文件的目录下编按如下方法编写Makefile文件:

  #Makefile start..

  CC := gcc #根据需要添加其它如XX := g++

  CFLAGS := -Wall -O -g #优化,输出调试信息,及所有警告

  TARGET :=argcv test hello unixio getuid #要编译的目标名,文件名去后缀的

  #下面开始一一编译了

  all:$(TARGET)

  @echo compileing...

  %.o:%.c

  $(CC) $(CFLAGS) -c $< #发现用-c和-o都是输出一样的,有点不明白

  clean:

  rm -rf  $(TARGET)

  #end Makefile

  2.执行make,输出结果:

  [savant@savant-host prog]$ make

  gcc  -Wall -O -g    argcv.c   -o argcv

  gcc  -Wall -O -g    test.c   -o test

  gcc  -Wall -O -g    hello.c   -o hello

  gcc  -Wall -O -g    unixio.c   -o unixio

  gcc  -Wall -O -g    getuid.c   -o getuid

  3.另外,如果这个目录是存放的一个项目的文件,所有的文件最终生成一个可执行文件,用下面的Makefile:

  CC = gcc

  LD = gcc

  CFLAGS = -Wall -c

  LDFLAGS = -lpthread #还可以加入INCLUDES和LIBS变量,视情况而定

  SRCS = $(wildcard *.c)  #SRCS的值就是当前面目录下面所有的以.c结尾的源文件

  OBJS = $(patsubst %c,%o,$(SRCS))  #SRCS目录下创建c文件相对的o文件

  TARGET = myapp   #最终链接生成的目标名

  .PHONY: all clean

  all: $(TARGET)

  $(TARGET): $(OBJS)

  $(LD) $(LDFLAGS) -o $@ $^

  %o: %c

  $(CC) $(CFLAGS) -o $@ $<

  clean:

  @rm -f *.o $(TARGET)

  编译当前Makefile所在目录下的所有.c文件

  执行

  make

  make clean

本文作者:网友 来源:中国IT实验室 http://linux.chinaitlab.com/c/806586.html
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的