1

这是一个小故事

这些天我试图追踪Makefile. 根据EDK override mechanism,一个组件同时使用覆盖路径下的同名源代码编译,其余在组件目录下。

假设有两个同名的头文件,目录路径如下:

组件目录 -D:\outside\inner\hello.h
覆盖目录 -D:\outside\inner\overrides\hello.h

因此,D:\outside\inner\overrides在编译期间使用。

但是,这里有一个问题!

众所周知,我们可以在 Makefile 中添加宏来指示包含路径。例如:

INC = -I D:\outside\inner

然后我添加了另一个包含路径,例如:

INC = $(INC) -I D:\outside\inner\overrides

如果我在 Makefile 中设置命令,例如:

hello : hello.c hello.h
<Tab>gcc -c hello hello.c $(INC)

编译器还会拿走覆盖路径下的 hello.h 文件吗?还是仅通过 INC 路径(组件路径)获取第一个找到的文件?

谢谢回答。

4

1 回答 1

1

gcc将使用它在包含路径中找到的第一个标头。您可以仔细检查我是否故意在其中一个头文件中犯了语法错误并查找错误消息。或者把它放在覆盖标题中:

 #warning "using overrides header"

并寻找警告信息。

于 2012-12-22T08:06:17.310 回答