我如何找出 header g++ 包括哪些?
How do I find out which header g++ includes?
我正在编译一个 open-source 项目,该项目没有声明 sincos
函数未声明。当我查看 math.h
时,声明就在那里。我在 math.h
的最顶部添加了一个警告,以查看它是否被包含(如果包含,则会打印警告),但实际上在我编译代码时它永远不会被打印出来。因此,我假设它可能从 /usr/include/math.h
.
以外的其他地方被包含进来
问题是它是一个巨大的代码库,就手动跟踪包含目录等而言是非常难以理解的。
有没有办法告诉 g++ 打印它解析的所有包含的完整路径?
您可以将 -E
选项仅用于 运行 预处理器。这将生成所有头文件预处理后的源代码,这可能很长。
相反,您可以生成一个 makefile 来显示依赖关系。如果您使用 -E -M
,您应该会看到该文件所依赖的所有包含文件的列表。
除了 g++ -E -C
,我发现 -v
参数对这种情况很有用。它将为您提供所有默认搜索 paths/sysrooty 内容,以及传递给子工具的所有默认内部参数。
此外,此命令会告诉您 gcc 是否正在尝试使用不存在的默认包含路径,这是错误配置的 gcc 工具链中的常见问题。
我正在编译一个 open-source 项目,该项目没有声明 sincos
函数未声明。当我查看 math.h
时,声明就在那里。我在 math.h
的最顶部添加了一个警告,以查看它是否被包含(如果包含,则会打印警告),但实际上在我编译代码时它永远不会被打印出来。因此,我假设它可能从 /usr/include/math.h
.
问题是它是一个巨大的代码库,就手动跟踪包含目录等而言是非常难以理解的。
有没有办法告诉 g++ 打印它解析的所有包含的完整路径?
您可以将 -E
选项仅用于 运行 预处理器。这将生成所有头文件预处理后的源代码,这可能很长。
相反,您可以生成一个 makefile 来显示依赖关系。如果您使用 -E -M
,您应该会看到该文件所依赖的所有包含文件的列表。
除了 g++ -E -C
,我发现 -v
参数对这种情况很有用。它将为您提供所有默认搜索 paths/sysrooty 内容,以及传递给子工具的所有默认内部参数。
此外,此命令会告诉您 gcc 是否正在尝试使用不存在的默认包含路径,这是错误配置的 gcc 工具链中的常见问题。