美文网首页
Makefile遍历 目录内文件 编译

Makefile遍历 目录内文件 编译

作者: 红色海_ | 来源:发表于2023-10-11 22:10 被阅读0次

    来自这里 Makefile遍历编译示例_makefile 遍历文件-CSDN博客

    记录给自己,避免以后搜索太花时间

    简要的遍历编译方法:
    使用for语句进入当前目录的各个子目录,然后使用make -C $(CUR_PATH),进行编译各个子目录。

    假设工程如下

    --/
      -./time
         -time.c
      -./gip
        -gip.c
    

    整个工程要编译出来两个可执行文件time和gip,一次性编译完成。

    在工程根目录下创建Makefile文件,内容如下:
    这个Makefile会遍历当前目录下的所有第一级子目录,然后循环进入各个子目录,调用子目录里面的Makefile,全部跑一遍。 如果想遍历更深一点通过-maxdepth 的参数进行控制。

    CUR_PATH := $(shell pwd)
    PRJ_PATH := $(CUR_PATH)/..
     
    SRC_FOLDER := $(shell find $(CUR_PATH) -maxdepth 1 -type d)
    BASE_SRC_FOLDER := $(basename $(patsubst $(CUR_PATH)/%, %, $(SRC_FOLDER)))
    BASE_SRC_FOLDER := $(filter-out $(CUR_PATH), $(BASE_SRC_FOLDER))
    BASE_SRC_FOLDER := $(filter-out lib, $(BASE_SRC_FOLDER))
    BASE_SRC_FOLDER := $(filter-out obj, $(BASE_SRC_FOLDER))
     
    .PHONY:default clean
     
    default:
        echo $(SRC_FOLDER)
        echo $(BASE_SRC_FOLDER)
        @for dir in ${BASE_SRC_FOLDER}; do make -C $(CUR_PATH)/$$dir ||exit; done
        @echo build project done!
     
    clean:
        @for dir in ${BASE_SRC_FOLDER}; do make -C $(CUR_PATH)/$$dir clean ||exit; done
        @echo clean project done!
    

    然后进入time文件夹,创建Makefile:

    time:$(subst .c,.o,$(wildcard *.c))
        gcc $^ -o $@
    
    %.o:%.c
        gcc -c $< -o $@
    
    clean:
        rm $(subst .c,.o,$(wildcard *.c))
    

    再进入gip文件夹,创建Makefile:
    gip.c这个文件用到了pthread_create, 所以编译参数比time的参数要多链接一个lib,使用了-lpthread

    LIBS += -lpthread
    
    gip:$(subst .c,.o,$(wildcard *.c))
        gcc $^ $(LIBS) -o $@
    
    %.o:%.c
        gcc -c $< -o $@
    
    clean:
        rm $(subst .c,.o,$(wildcard *.c))
    看一下编译的过程:
    
    make[1]: 进入目录“/home/qq/code/test/time”
    gcc -c time.c -o time.o
    gcc time.o -o time
    make[1]: 离开目录“/home/qq/code/test/time”
    make[1]: 进入目录“/home/qq/code/test/gip”
    gcc -c gip.c -o gip.o
    gcc gip.o -lpthread -o gip
    make[1]: 离开目录“/home/qq/code/test/gip”
    build project done!
    

    精炼的遍历遍历方案模板,可根据需要添加内容

    相关文章

      网友评论

          本文标题:Makefile遍历 目录内文件 编译

          本文链接:https://www.haomeiwen.com/subject/vpmkydtx.html