1、每个IDE里的项目都有一个makefile的模版,名字叫 “.wrmakefile” 用句号作为开头是因为Eclipse的项目管理可以设置过滤器,不显示本文件。
该文件的大概内容:
all : subdirs_all main_all
#macros and complier flags generated by IDE
%IDE_GENERATED%
-include *.makefile
main_all : check_objectdir $(PROJECT_TARGETS)
@echo "make: built targets of `pwd`"
check_objectdir :
@if [ ! -d "$(OBJ_DIR)" ]; then/
mkdir -p $(OBJ_DIR);/
fi
# recursive make in SUBDIRS
subdirs_all :
@_PWD=`pwd`;/
for dir in _dummy_ $(SUBDIRS); do/
if [ "$$dir" = "_dummy_" ]; then/
continue ;/
fi;/
if [ ! -d "$$dir" ]; then/
continue ;/
fi;/
echo "Recursive make: Changing to Directory '$$dir'";/
cd "$$dir";/
"$(MAKE)" -f "$(MAKEFILE)" $(MFLAGS) all || exit;/
echo "Recursive make: Changing back to Directory '$$_PWD'";/
cd "$$_PWD";/
done
clean ::
@_PWD=`pwd`;/
for dir in _dummy_ $(SUBDIRS); do/
if [ "$$dir" = "_dummy_" ]; then/
continue ;/
fi;/
if [ ! -d "$$dir" ]; then/
continue ;/
fi;/
echo "Recursive make: Changing to Directory '$$dir'";/
cd "$$dir";/
"$(MAKE)" -f "$(MAKEFILE)" $(MFLAGS) $@ || exit;/
echo "Recursive make: Changing back to Directory '$$_PWD'";/
cd "$$_PWD";/
done
上述的 subdirs_all 目标表示递归的编译子目录。
3、在每一个子目录下,重复上述工作,根据用户的设置,保证要编译的子目录下都产生正确的makefile文件。
4、调用make命令,make命令就会根据上述生成的makefile 递归的编译整个项目。
当然在启动命令之前,IDE需要把make命令的路径,以及makefile里调用的命令,如gcc 等加入到系统的搜索路径。 以及设置一些makefile里必须的全局环境变量,如SDK的根目录等。