当前位置 博文首页 > 积水成渊:linux 中多级项目的编译之makefile实现(一)

    积水成渊:linux 中多级项目的编译之makefile实现(一)

    作者:[db:作者] 时间:2021-07-29 15:37

    在构建项目树时, 经常会遇到多级项目的编译问题。linux下的编译基本是由makefile来控制的,这里把我的makefile模板贡献出来。


    我的项目代码结构如下


    root/
          -apps/
                  -net-snmp/
                  -boa/
                  -libs/
                  ...
          -modules/
          -kernel/


    1.root下makefile

    export ROOT_DIR = $(shell pwd)
    export ROOT_BUILD_DIR = $(ROOT_DIR)/build
    all: apps modules kernel
    
    apps:
            $(MAKE) -C apps
    modules:
            $(MAKE) -C modules
    kernel:
            $(MAKE) -C kernel
    

    2. apps下makefile

    exportAPP_BUILD_DIR := $(ROOT_BUILD_DIR)/user
    exportAPP_EXETS_DIR :=  $(ROOT_BUILD_DIR)/bin
    exportAPP_ROOT_DIR := $(shell pwd)
    APP_MODULES :=net-snmp boa
    APP_LIBS:= libs
    all : init libs apps
    init:
           @mkdir -p $(APP_BUILD_DIR )
           @mkdir -p $(APP_EXETS_DIR)
    libs: $(patsubst%, _lib_%, $(APP_LIBS))
    $(patsubst %,_lib_%, $(APP_LIBS)):
           @echo
           @echo Building $(patsubst _lib_%, %, $@)
           $(MAKE) -C $(patsubst _lib_%, %, $@) all
     
    apps:$(patsubst%, _app_%, $(APP_LIBS))
    $(patsubst %,_app_%, $(APP_LIBS)):
           @echo
           @echo Building $(patsubst _app_%, %, $@)
           $(MAKE) -C $(patsubst _app_%, %, $@) all
    clean:策略同libs和apps

    3. modules下同apps下类似

    4. kernel下放的是内核源码,无需修改

    这样就可以自动进入子目录make子项目了。 子目录中实现具体编译工作的makefile下篇再作介绍。

    cs
    下一篇:没有了