使用命令行选项包含头文件?

Posted

技术标签:

【中文标题】使用命令行选项包含头文件?【英文标题】:Include header files using command line option? 【发布时间】:2011-03-24 04:20:18 【问题描述】:

是否可以从命令行指定要包含的额外头文件(使用 GCC 4 / C++)?

或者除了#include 之外还有其他方法可以包含文件吗?

背景:我正在尝试在我自己的 PC 上编译一个大型代码库。代码通常在一个集群中编译,具有复杂的构建系统(SoftRelTools 有人吗?),它与操作系统交织在一起,因此几乎不可能将其安装在其他地方(实际上是数百个 makefile 和 shell 脚本,而且很难网络驱动器的编码路径)。然而,实际的代码相当简单,并且编译得很好,但是它缺少很多包含(主要是“include <vector>”和“include <math.h>”)。我猜构建系统通常会处理这个问题,但我必须检查代码并手动添加包含,我宁愿避免这样做。

【问题讨论】:

【参考方案1】:

来自 gcc 手册:

-包含文件

处理文件,就像“#include "file"”作为主要源文件的第一行出现一样。但是,搜索文件的第一个目录是预处理器的工作目录,而不是包含主源文件的目录。如果在此处未找到,则正常在“#include "..."”搜索链的其余部分中进行搜索。

如果给出了多个 -include 选项,文件将按照它们在命令行中出现的顺序被包含。

【讨论】:

【参考方案2】:

我found -include 选项。这是你想要的吗?

-包含文件

处理文件好像“#include”file“”作为第一行出现 主要源文件。然而 搜索文件的第一个目录是 预处理器的工作目录 而不是包含的目录 主源文件。如果没有找到 在那里,它在 "#include "..."" 的剩余部分 搜索链正常。

如果给出了多个 -include 选项,则文件包含在 它们在命令行中出现的顺序。

【讨论】:

仅供参考,-include 功能主要用于支持预编译的头文件。这样您就可以将 .pch 文件注入到所有源文件中,而无需编辑每一个源文件。 谢谢!虽然我做了 RTFM(M=manpage),但我错过了。我还认为 PCH 只是 Visual C++ 的一项功能……但似乎这就是他们在构建系统中使用的功能…… Visual C* 对应的命令行参数是/FI,以防万一有人需要移植使用它的构建。 #include (尖括号)有什么类似的吗?更详细地说,我对它的 clang 支持很感兴趣 太棒了。 @gavinb 当我需要用一些替代函数和/或对我的 libc 代码的扩展来补充一些 libc 头文件时,我将它用于裸机用例。我所有的代码仍然可以使用原型的标准头文件,但也强制包含一些我需要的额外定义,以使它们在我的平台上工作。【参考方案3】:

根据 gcc 文档,命令行开关“-include file”可以完成这项工作。

【讨论】:

以上是关于使用命令行选项包含头文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何指定GCC的默认头文件路径

Linux常用命令——head

Linux 命令行:cURL 的十种常见用法

tail命令

CCF-命令行选项(模拟)

suricata命令行选项