zoukankan      html  css  js  c++  java
  • 通用多目录makefile的写法

    我的项目文件层次是:项目名称/include、output、src

    src/admin、stu、tch、common

    最外层的Makefile:

    DEBUG = y
    MYDEBUG = DEBUG
    ifeq ($(DEBUG),y)
    DEBFLAGS = -O -g -D$(MYDEBUG)
    else
    DEBFLAGS =
    endif

    PRJ_HOME := $(shell pwd)
    SOURCES := $(wildcard *.c)
    OBJECTS := ${SOURCES:%.c=%.o}
    INCPATH := -I$(PRJ_HOME)/include -I./

    export CFLAGS += $(INCPATH)  $(DEBFLAGS)
    export CC = gcc
    export OUTPUTDIR = $(PRJ_HOME)/output

    PROGRAM = system_stu
    VPATH = ${OUTPUTDIR}

    .PHONY : all
    all : ${PROGRAM}

    ${PROGRAM} : ${OBJECTS} oadmin ocommon ostu otch
     $(CC) -o $@ ${OUTPUTDIR}/*.o $(CFLAGS)
    %.o:%.c
     $(CC) -o ${OUTPUTDIR}/$@ -c $< $(CFLAGS)

    oadmin :
     @$(MAKE) -C src/admin/
    ocommon :
     @$(MAKE) -C src/common/
    ostu :
     @$(MAKE) -C src/stu/
    otch :
     @$(MAKE) -C src/tch/

    .PHONY : clean
    clean :
     $(RM) ${OUTPUTDIR}/*.o *.o ${PROGRAM} 

    子目录的Makefile:

    SOURCES := $(wildcard *.c)
    OBJECTS := ${SOURCES:%.c=%.o}
    VPATH = $(OUTPUTDIR)

    all : ${OBJECTS}
    %.o:%.c
     $(CC) -o ${OUTPUTDIR}/$@ -c $< $(CFLAGS)
    clean :

  • 相关阅读:
    HashMap和Hashtable的区别
    java倒计时三种简单实现方式
    AngularJS---基本操作
    AngularJS---认识AngularJS
    Java线程面试题
    JAVA中高访问量高并发的问题怎么解决?
    Java高并发,如何解决,什么方式解决
    Map总结
    Github
    反射
  • 原文地址:https://www.cnblogs.com/lidabo/p/4521097.html
Copyright © 2011-2022 走看看