gpt4 book ai didi

c++ - 生成文件 |对头文件中包含的另一个头文件的依赖

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:16 24 4
gpt4 key购买 nike

假设我在 Makefile 中有以下规则。

test.o: test.cpp foo.h
g++ -c -o test.o test.cpp

现在假设 foo.h 包含 bar.h,如下所示。

user $ head -n 5 foo.h
#include"bar.h"
/*
.
.
*/
user $

如果 bar.h 有任何变化,是否会重新构建 test.o

或者我应该在规则中特别提到 bar.h 如下:

test.o: test.cpp foo.h bar.h
g++ -c -o test.o test.cpp

最佳答案

Will the test.o be built again if there are any changes in bar.h?

没有。 Make 无法了解这种依赖性,也无法检查您的 #include 中的更改。

当然,除非您将处理 header 依赖项的任务留给知道它们的实体:编译器。 (假设在此示例中使用 GCC 和 GNU make。)

  1. 根本不要将 header 列为依赖项。

  2. 生成项目中的 文件列表。

    SRCFILES := ...
  3. 生成依赖文件列表,每个SRCFILE一个.d文件。

    DEPFILES := $(patsubst %.cpp,%.d,$(SRCFILES))
  4. 将这些依赖文件包含到您的 Makefile 中。 (前导 - 表示如果它们不存在,例如在第一次编译时,Make 将不会产生错误。)

    -include $(DEPFILES)
  5. 使用通用规则,让编译器在编译每个源文件期间生成头文件依赖项列表。

    %.o: %.cpp Makefile
    @$(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@

    -MMD 生成 Make 规则,使目标文件依赖于包含的任何(非系统)头文件,名为 *.d-MP 添加了虚拟规则,如果从您的源中删除头文件,则可以避免错误。

关于c++ - 生成文件 |对头文件中包含的另一个头文件的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34239096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com