从MSVC输出生成Makefile依赖项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从MSVC输出生成Makefile依赖项相关的知识,希望对你有一定的参考价值。

在使用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/^(.*)$$/	1 \/" >> $(basename $@).d

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

答案

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

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

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

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

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

忽略生成的依赖项

Makefile 包含基于 Debug / Release 目标的依赖项

在makefile中使用g++和-MMD自动生成依赖