makefile - 依赖生成器

时间:2011-05-16 12:31:01

标签: makefile

我对我面临的一个问题有两个问题。

对于使用gcc的项目,我们采用了非递归boilermake。我们希望将其用于其他一些交叉编译器,例如微芯片C18,它们不支持-MM / MD选项来生成依赖关系。

我不想使用makedepend,因为它很老,并且依赖于makefile;此外,我认为使用makedepend将源与源分开是很困难的。

最后我的问题:

  1. 是否有现成的C / C ++依赖关系生成器(类似于-MM / -MD选项)? (Windows和Linux都需要构建支持。)

  2. 我可以使用gcc仅生成依赖项文件并进行实际编译 与其他一些编译器?我会遇到这种方法的任何问题吗? 如果是,则以下

    所需的更改将是什么
    # COMPILE_C_CMDS - Commands for compiling C source code.
    define COMPILE_C_CMDS
        @mkdir -p $(dir $@)
        $(strip ${CC} -o $@ -c -MD ${CFLAGS} ${SRC_CFLAGS} ${INCDIRS} \
            ${SRC_INCDIRS} ${SRC_DEFS} ${DEFS} $<)
        @cp ${@:%$(suffix $@)=%.d} ${@:%$(suffix $@)=%.P}; \
         sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
             -e '/^$$/ d' -e 's/$$/ :/' < ${@:%$(suffix $@)=%.d} \
             >> ${@:%$(suffix $@)=%.P}; \
             rm -f ${@:%$(suffix $@)=%.d}
    endef
    

1 个答案:

答案 0 :(得分:1)

  1. 除了makedepend之外我什么都不知道(但我并不完全理解你对它的厌恶)。
  2. 是的,当然。依赖性处理完全是GCC与GNUMake交谈的问题(我希望你正在使用GNUMake)。其他编译器不需要了解它。
# COMPILE_C_CMDS - Commands for compiling C source code.
define COMPILE_C_CMDS
    @mkdir -p $(dir $@)
    # This line generates the dependency file foo.d
    $(strip ${CC} -o $@ -MM -MF ${@:%$(suffix $@)=%.d} ${CFLAGS} ${SRC_CFLAGS} \
        ${INCDIRS} ${SRC_INCDIRS} ${SRC_DEFS} ${DEFS} $<)
    # This one actually compiles. You must adapt the sytax for your compiler.
    $(strip ${SOME_OTHER_COMPILER} -o $@ -c ${CFLAGS} ${SRC_CFLAGS} ${INCDIRS} \
        ${SRC_INCDIRS} ${SRC_DEFS} ${DEFS} $<)
    @cp ${@:%$(suffix $@)=%.d} ${@:%$(suffix $@)=%.P}; \
     sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
         -e '/^$$/ d' -e 's/$$/ :/' < ${@:%$(suffix $@)=%.d} \
         >> ${@:%$(suffix $@)=%.P}; \
         rm -f ${@:%$(suffix $@)=%.d}
endef

P.S。如果您将此文件作为模式规则而不是已定义的命令执行,那么您的makefile可能会更清晰。但