我对我面临的一个问题有两个问题。
对于使用gcc
的项目,我们采用了非递归boilermake。我们希望将其用于其他一些交叉编译器,例如微芯片C18,它们不支持-MM
/ MD
选项来生成依赖关系。
我不想使用makedepend,因为它很老,并且依赖于makefile;此外,我认为使用makedepend将源与源分开是很困难的。
最后我的问题:
是否有现成的C / C ++依赖关系生成器(类似于-MM
/ -MD
选项)? (Windows和Linux都需要构建支持。)
我可以使用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
答案 0 :(得分:1)
# 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可能会更清晰。但