使用 GCC 编译 C/C++ 源代码时,可以使用标志以 Makefile 规则形式创建附加依赖信息-MMD -MT $@ -MF $(basename $@).d
。我使 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 编译给定源文件的包装命令。这会很好地生成依赖文件,但输出会被过滤掉,因此我会丢失编译器产生的所有警告和错误退出。关于如何防止这种情况有什么聪明的想法吗?
如果您将其放入 shell 脚本中set -e
在顶部,那么失败将导致以非零代码退出,并且 Make 会看到它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)