Windriver的编译流程 和 简洁的编译脚本

来源:互联网 发布:c语言指针怎么用 编辑:程序博客网 时间:2024/06/08 05:33
分析了一下Windriver的makefile脚本,结构很清晰。 windriver的workbench生成的makefile的过程大概如下:
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  目标表示递归的编译子目录。


2、 用户设置好当前项目的编译属性后,IDE自动生成这些属性所对应的符合makefile语法的语句,插入到上述  %IDE_GENERATED%  的地方。并根据这些内容,在当前目录下生成一个makefile文件
 
3、在每一个子目录下,重复上述工作,根据用户的设置,保证要编译的子目录下都产生正确的makefile文件。

4、调用make命令,make命令就会根据上述生成的makefile 递归的编译整个项目。

当然在启动命令之前,IDE需要把make命令的路径,以及makefile里调用的命令,如gcc 等加入到系统的搜索路径。 以及设置一些makefile里必须的全局环境变量,如SDK的根目录等。