从MSVC输出生成Makefile依赖项

问题描述 投票:4回答:1

在使用GCC编译C / C ++源代码时,可以使用标志-MMD -MT $@ -MF $(basename $@).d在Makefile规则表单中创建其他依赖项信息。我使我的Makefile脚本与GCC和MSVC工具链兼容,但我仍然在MSVC上生成依赖文件。 有一个标志/showIncludes,输出源文件包括stdout中的信息,格式如下Note: including file: filename。尝试解析它(到目前为止成功)我得到以下makefile函数:

msvc-dep-gen =  echo $@: $< |\
    sed -e "s/^.*$$/&\\/" >$(basename $@).d && \
    $(1) /showIncludes |\
    sed -e "/^Note: including file:/!d"\
        -e "s/^Note: including file:\s*\(.*\)$$/\1/"\
        -e "s/\\/\//g"\
        -e "s/ /\\ /g"\
        -e "s/^\(.*\)$$/\t\1 \\/" >> $(basename $@).d

其中参数$(1)是使用MSVC编译给定源文件的包装命令。这会生成依赖文件,但输出会被过滤掉,所以我会丢失所有警告和编译器产生的错误。关于如何防止这种情况的任何聪明的想法?

c++ batch-file visual-c++ makefile
1个回答
0
投票

如果你把它放在顶部有set -e的shell脚本中,那么失败将导致退出非零代码,而Make会看到它。

© www.soinside.com 2019 - 2024. All rights reserved.