我是如何排查make的错误

Build C++项目代码时少不了使用make,在本地环境和推荐环境存在差异的情况下,难免会不碰到报错,这时常会让我感到沮丧。为了我身心健康,将一次排查的过程记录下。

Make的报错如下:

最下方有四个带***的行,这些行代表一次target: prerequisites的失败,方括号里的为失败的target。这些target分散在多个文件中,如何逐步找到具体的位置和出错的命令?
从当前目录的Makefile开始,make首先根据该文件构建check-lint,从Makefile中发现,check-lint的规则为:

单独去执行命令,得到报错:

可以看出报错语句少了一条,阅读CMakeFiles/Makefile2,发现构建check-lint的规则为:

这时候可以不用根据规则逐句执行命令,可以根据报错快速定位到出错的target,make[1]: *** [CMakeFiles/check-lint.dir/all] Error 2,就是CMakeFiles/check-lint.dir/all,单独去执行构建它的命令,执行make -f CMakeFiles/check-lint.dir/build.make CMakeFiles/check-lint.dir/build报错:

再去读CMakeFiles/check-lint.dir/build.make中CMakeFiles/check-lint.dir/build的构建过程,发现依赖check-lint,后者依赖CMakeFiles/check-lint,而构建CMakeFiles/check-lint的命令为

echo '/Users/hsy/dev/cmu15445-labs/src/buffer/buffer_pool_manager_instance.cpp /Users/hsy/dev/cmu15445-labs/src/buffer/clock_replacer.cpp /Users/hsy/dev/cmu15445-labs/src/buffer ...' | xargs -n12 -P8 /Users/hsy/dev/cmu15445-labs/build_support/cpplint.py ...

再去看这个python脚本,发现文件开头执行了命令/usr/bin/env python,由于本机只有python3,因此把该句改为/usr/bin/env python3即可。

posted @ 2022-08-26 15:57  Hidea  阅读(2115)  评论(0编辑  收藏  举报