makefile 循环编译子模块,出错时自动退出

     编译一个大的工程时,往往都是透过for循环重重迭代编译各个子模块。如果某些子模块编译出错,没有退出就
会导致最后生成的库没有对应的功能或者符号。此时,我们需要再出现出错时,makefile编译主动退出。

先看网上的一个截图,阐述了一个解决方法:
makefile 循环编译子模块,出错时自动退出_第1张图片
说明:SUB_BOOKS 是需要循环编译的子模块,通过可以这样获得,SUB_BOOKS = $(shell find  path/  -type d )
          或者直接赋值也行。先循环在子目录先查找是否存在makefile,存在的情况下编译,要点是在编译子模块
          时,添加的 || exit "$$?"  可以识别到当前模块编译是否出错,是则停止编译。


根据以上分析,我们可以采用如下方式测试:

target:
     @for dir in $(subdir); do \
          echo ------------------------compiling $$dir------------------------; \
          $(MAKE) -C $$subdir  || exit "$$?";  \
     done

在子模块的某个文件弄一段错误代码,测试会发现去掉 exit "$$?"可以跳过错误继续编译,而加上后就会退出。

你可能感兴趣的:(linux,makefile)