zoukankan      html  css  js  c++  java
  • 一个简单makefile

    目标

      实现一个简单的通用makefile,包含C文件自动识别,头文件依赖自动生成,所有中间文件保存在同一路径下。

    实现

    .PHONY : all clean
    
    CC      = gcc
    CFLAGS  = 
    LDFLAGS = 
    
    TARGET  = test
    SRCS    = $(wildcard *.c)
    OBJS    = $(patsubst %.c, tmp/%.o, $(SRCS))
    DEPS    = $(patsubst %.c, tmp/%.d, $(SRCS))
    
    all : $(TARGET)
    
    $(TARGET) : $(OBJS)
        $(CC) -o $@ $^ $(LDFLAGS)
    
    tmp/%.o : %.c
        $(shell if [ ! -e tmp ];then mkdir -p tmp; fi)
        $(CC) -o $@ -c $< $(CFLAGS) $(INCLUDEFLAGS)
    
    tmp/%.d : %.c
        $(shell if [ ! -e tmp ];then mkdir -p tmp; fi)
        @set -e; rm -f $@; $(CC) -MM $< $(INCLUDEFLAGS) > $@.$$$$; \
        sed 's,\($*\)\.o[ :]*,tmp/\1.o $@ : ,g' < $@.$$$$ > $@; \
        rm -f $@.$$$$
    
    ifneq ($(MAKECMDGOALS), clean)
    -include $(DEPS)
    endif
    
    clean :
        rm -rf $(TARGET) tmp

    说明:

    1.编译过程生成的中间文件全部存在放在tmp目录

    2.最后生成的目标文件是TARGET指定的变量值

    3.makefile和源文件要放在同一级目录下

    4.限制:只使用于小项目,如果涉及源码文件要放在不同的文件夹下,该makefile不能满足要求

  • 相关阅读:
    转战Python
    spark
    idea的配置
    19年春第十六周学习
    19年春第十五周学习
    个人作业-最长英语链
    rpm dpkg 用法比较
    foxmail 无法下载同步邮件 error:00000001:lib(0):func(0):reason(1)
    date命令详解
    用cron服务自动运行脚本
  • 原文地址:https://www.cnblogs.com/chusiyong/p/15683280.html
Copyright © 2011-2022 走看看