【问题标题】:How does makefile select the header file from those duplicates?makefile 如何从这些重复项中选择头文件?
【发布时间】:2012-12-09 16:09:45
【问题描述】:

来个小故事

这几天我试图追踪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路径(组件路径)获取第一个找到的文件?

感谢您的回答。

【问题讨论】:

    标签: include makefile duplicates


    【解决方案1】:

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

     #warning "using overrides header"
    

    并查找警告消息。

    【讨论】:

    • 非常感谢,我只是测试在包含路径的第一个头文件中添加错误代码,并且错误消息确实只在第一个文件编译时出现。它对包含路径中第二个标头中的错误代码没有响应。
    • CL.exe控制MS C和C++编译器和链接器在找到第一个文件时不编译第二个文件的方法相同。
    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    相关资源
    最近更新 更多