从 MSVC 输出生成 Makefile 依赖项

Posted

技术标签:

【中文标题】从 MSVC 输出生成 Makefile 依赖项【英文标题】:Generate Makefile dependency from MSVC output 【发布时间】:2016-10-07 16:37:40 【问题描述】:

在使用 GCC 编译 C/C++ 源代码时,可以使用标志 -MMD -MT $@ -MF $(basename $@).d 在 Makefile 规则表单中创建附加依赖项信息。我使我的 Makefile 脚本与 GCC 和 MSVC 工具链兼容,但我仍然在 MSVC 上生成依赖文件。 有一个标志/showIncludes 输出源文件在标准输出中包含以下形式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 编译给定源文件的包装命令。这会很好地生成依赖文件,但输出会被过滤掉,所以我会丢失所有警告,并且编译器产生的错误退出。关于如何防止这种情况的任何聪明的想法?

【问题讨论】:

类似问题:***.com/questions/2987298/… 【参考方案1】:

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

【讨论】:

以上是关于从 MSVC 输出生成 Makefile 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

从stem中的文件名生成makefile目标依赖项

为啥在 makefile 中不生成依赖项?

是否可以在 Makefile 的单次传递中使用 gcc/g++/nvcc 自动依赖项 -M 而无需将依赖项保存到文件中?

使用 Makefile、源代码生成器并使用 gcc 生成依赖项

忽略生成的依赖项

Makefile中自动生成头文件依赖