• 一个通用的makefile(一)


    最近在编写Android编译系统时,需要遍历每一个目录下每一个文件夹下的makefile,网上的方法有些繁琐 ;就直接贴上自己遍历子目录深度为1;(for  temporary)(之后会继续更新)

    下面是我的一个简单实例工程:

    文件夹目录层次:

    1、根目录(相对于项目而言)的makefile

     1 #获取当前目录下的子目录名字
     2 subdir = $(shell ls -l | grep ^d | awk '{print $$9}')
     3 
     4 .PHONY : all clean ${subdir} NULL
     5 
     6 all: ${subdir}
     7 ${subdir} : NULL 
     8     make -C $@ clean
     9     make -C $@
    10 
    11 #make clean可以直接去掉各层目录下的*.o文件,而在Android编译系统中会直接删除out路径就可以了
    12 clean: 
    13     find ./ -name '*.o' | xargs -I{} rm -f {}
    14 NULL:
    15 #:为空语句
    16     @: 

    2、子目录下的makefile:

     1 #PWD = "shell pwd"
     2 CC := gcc        
     3 #shell pwd是比较好一点的
     4 INC_DIR := $(shell pwd)/inc/
     5 SRC_DIR := $(shell pwd)/src/
     6 OBJ_DIR := $(shell pwd)/obj/
     7 BIN_DIR := $(shell pwd)/bin/
     8 LIB_DIR := $(shell pwd)/lib/
     9 
    10 #目标文件名
    11 TARGET  := $(BIN_DIR)/main
    12 
    13 
    14 CFLAGS := -g
    15 CFLAGS += -Wall
    16 CFLAGS += -D_FORTIFY_SOURCE=2
    17 
    18 
    19 #patsubst 是替换通配符,会把第一个%.c替换成第二个参数的%.c,
    20 #wildcard 是把指定目录 $(SRC_DIR)下面的.c文件全部展开
    21 #notdir 是把展开的文件去掉路径信息
    22 SOURCES := $(patsubst %.c,%.c,$(notdir $(wildcard $(SRC_DIR)/*.c))) 
    23 
    24 OBJECTS := $(addprefix $(OBJ_DIR)/, $(SOURCES:.c=.o))
    25 
    26 
    27 .PHONY : clean all $(TARGET)  $(OBJECTS)
    28 
    29 INCPATHS := 
    30     -I. 
    31 
    32 LIBDIRS :=  
    33     -L. 
    34     
    35 LIBS := 
    36     -lpthread 
    37 
    38 $(TARGET) : $(OBJECTS)
    39     @mkdir -p  $(LIB_DIR) $(BIN_DIR) 2> /dev/null
    40     $(CC) $(CFLAGS)  -o $@ $(OBJECTS)
    41 $(OBJECTS) : $(OBJ_DIR)/%.o : $(SRC_DIR)/%.c
    42     @mkdir -p $(OBJ_DIR) 2> /dev/null
    43     $(CC) -c $(CFLAGS) $< -o $@
    44 
    45 all: $(OBJECTS) $(TARGET)
    46 
    47 clean:
    48     find ./ -name '*.*.swp' | xargs -I{} rm -f {}
    49     rm -f $(OBJECTS) $(TARGET) 

    Reference:

     http://blog.csdn.net/xukai871105/article/details/36475319

    http://blog.csdn.net/styyzxjq2009/article/details/26491331

  • 相关阅读:
    敏捷开发 第18章 薪水支付案例研究:第一次迭代开始
    敏捷软件开发 13~16
    pyqt5与QML开发小结
    【Forge】Minecraft 1.7.10 Mod开发研究
    【Forge】Minecraft 1.7.10 Mod开发研究
    【Forge】Minecraft 1.7.10 Mod开发研究
    我写了个屎
    我要更新了!
    背景设定(暂定)
    砍手就砍手
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/7218515.html
Copyright © 2020-2023  润新知