知识1:
#在Makefile中书写在同一行中的多个命令属于一个完整的shell命令行,书写在独立行的一条命令是一个独立的shell命令行。
#因此:在一个规则的命令中,命令行“cd”改变目录不会对其后的命令的执行产生影响。就是说其后的命令执行的工作目录不会是之前使用“cd”进入的那个目录。
#如果要实现这个目的,就不能把“cd”和其后的命令放在两行来书写。而应该把这两条命令写在一行上,用分号分隔。这样它们才是一个完整的shell命令行。
实现多级指定编译。
#add by gujintong. 16/8/9
#源码包编译MAKEFILE
#libevent安装路径
LIBEVENT_INSTALL_PATH = "$(shell pwd)/libevent-2.0.21-stable/_install"
all: build FORCE
#编译准备工作
libevent.prepare:
#@./libevent.build
tar -xvf libevent-2.0.21-stable.tar.gz ;\
cd libevent-2.0.21-stable ;\
./configure --disable-shared --prefix=${LIBEVENT_INSTALL_PATH} --host=powerpc-e300c3-linux CC=${CROSS_COMPILE}gcc CXX=${CROSS_COMPILE}g++ ;\
cd ..
#编译
libevent.make:
$(MAKE) -C libevent-2.0.21-stable install
#编译收尾工作
libevent.finish:
if [ -d ${LIBEVENT_INSTALL_PATH}/lib ] ; then \
cp -rf ${LIBEVENT_INSTALL_PATH}/lib/*.a $(SYSROOT)/usr/lib ;\
fi
#目标和依赖
libevent.build : libevent.prepare libevent.make libevent.finish
libevent.clean :
cd libevent-2.0.21-stable ;\
make distclean
build: FORCE
$(MAKE) libevent.build
clean: FORCE
$(MAKE) libevent.clean
.PHONY: libevent.prepare libevent.make libevent.finish libevent.build libevent.clean build clean help FORCE
上一级Makefile如下:
DEPENDS := $(TOPDIR)/Makefile
export DEPENDS
all: build FORCE
prepare:
@mkdir -p $(OUTPUT_DIR)
@mkdir -p $(SYSROOT)
@mkdir -p $(SYSROOT)/bin $(SYSROOT)/lib
@mkdir -p $(SYSROOT)/usr
@mkdir -p $(SYSROOT)/usr/bin $(SYSROOT)/usr/lib
config: tools/config/mconf tmp/.config-target.in tmp/.config-package.in FORCE
if [ \! -f $(OUTPUT_DIR)/.config -a -e $(BUILD_DIR)/.config ]; then \
cp $(BUILD_DIR)/.config $(OUTPUT_DIR)/.config; \
fi
$< Config.in
tools.% rootfs.% modules.% sdk.% apps.% plugins.% firmware.%: prepare FORCE
$(MAKE) -C $(patsubst %.$*,%,$@) $*
boot.% loader.% kernel.% : prepare FORCE
$(MAKE) -C $(patsubst %.$*,%,$@) $* -f nosx.mk
packages.% : prepare FORCE
$(MAKE) -C $(TOPDIR)/packages $*
build: FORCE
$(MAKE) tools.build
$(MAKE) boot.build
$(MAKE) loader.build
$(MAKE) kernel.build
$(MAKE) rootfs.build
$(MAKE) modules.build
$(MAKE) sdk.build
$(MAKE) apps.build
$(MAKE) plugins.build
$(MAKE) firmware.build
$(MAKE) packages.build
clean: FORCE
$(MAKE) tools.clean
$(MAKE) boot.clean
$(MAKE) loader.clean
$(MAKE) kernel.clean
$(MAKE) rootfs.clean
$(MAKE) modules.clean
$(MAKE) sdk.clean
$(MAKE) apps.clean
$(MAKE) plugins.clean
$(MAKE) firmware.clean
$(MAKE) packages.clean
help:
@cat $(TOPDIR)/docs/commands.txt
.PHONY: prepare config build clean help FORCE