在构建项目树时, 经常会遇到多级项目的编译问题。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下篇再作介绍。