自动生成的依赖关系导致编译速度缓慢。

3

我正在使用一些Boost库,并使用以下规则生成自动依赖项。我认为Boost头文件会使编译速度变慢,因为如果在Makefile中没有包含依赖项,那么编译项目将快大约10倍。是否有一种方法可以通过生成的依赖项来提高速度?

%.o: %.cc
  $(CXX) $(CFLAGS) $(INCLUDES) -MD -c $< -o $@
  @mv $*.d .deps/
  @cp .deps/$*.d .deps/$*.tmp
  @sed -e 's;#.*;;' -e 's;^[^:]*: *;;' -e 's; *\\$$;;' \
    -e '/^$$/d' -e 's;$$; :;' < .deps/$*.tmp >> .deps/$*.d
  @rm .deps/$*.tmp

3
由于您可能不会更改boost头文件,因此没有理由将它们添加为依赖项。因此,您可以寻找一种方法来排除boost头文件(以及其他系统头文件)。 - Torsten Robitzki
个人而言,我编写了一个自定义的Python脚本,可以在不到1秒钟的时间内扫描我的“src”并编写非常简单(没有“*”规则或由GCC生成的依赖项生成)的Makefile。 - Oleg2718281828
我在Ruby中做了同样的事情,为我的rake构建生成依赖文件。它简单地省略了所有尖括号<>中的包含项。 - Torsten Robitzki
1个回答

2

由于您很可能不会更改boost头文件,因此没有理由将它们添加为依赖项。通过使用-MMD生成依赖文件,系统头文件应该被忽略,因此您的依赖文件应该变得更小,这意味着make程序需要扫描更少的硬盘来查看文件是否仍然是最新的等等。当然,您必须使用<>而不是""来包含这些头文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接