【问题标题】:How to specify files to included before compilation by default默认情况下如何在编译前指定要包含的文件
【发布时间】:2019-05-09 15:17:51
【问题描述】:
// a.cpp
void foo() {
    uint16_t var_in_a;
}
// b.cpp
void foo() {
    uint16_t var_in_b;
}
// c.cpp
void foo() {
    uint16_t var_in_c;
}

在此示例中,我必须在所有 .cpp 文件中包含 <stdint.h> 文件。我想避免这种活动。我想在我的 builder/IDEs 属性中指定这个 <stdint.h> 文件,并让它在每个 .cpp 文件中包含这个文件。

有没有办法让编译器在编译任何.cpp 文件时包含指定的文件?

请给出以下编译工具/IDE的答案

  • 视觉工作室代码
  • 视觉工作室
  • g++

【问题讨论】:

  • 这不是编译器的工作。某些语言的某些 IDE 提供此功能。 C++ 编译器没有。并且有充分的理由。
  • 有没有办法让编译器在编译任何 .cpp 文件时包含指定的文件?.不要那样做。它阻止了代码的可移植性。在文件中明确包含您需要的所有内容以使其可移植。
  • 您必须在某处明确说明。您可以制作一个“bucket/util”标头来提取常见的东西,但这可能会带来麻烦,或者查看预编译标头。您是要节省打字时间还是其他什么?
  • 对于 Visual Studio 编译器:docs.microsoft.com/en-us/cpp/build/reference/…
  • 您可能还对stackoverflow.com/q/3387453/2466431感兴趣

标签: c++ visual-studio gcc g++


【解决方案1】:

如 cmets 中所述,您正在搜索命令行包含。详情请见Include header files using command line option?

Visual Studio 有一个类似的编译选项:/FI。官方文档:https://docs.microsoft.com/en-us/cpp/build/reference/fi-name-forced-include-file?view=vs-2019

【讨论】:

    【解决方案2】:

    简而言之,不(通常不适用于每个构建系统),您无法让编译器包含它们所依赖的头文件。他们无法知道哪些可能具有您使用的定义或原型。

    现在,您可以制作一个包含常用头文件的头文件,但如果某些 cpp 文件只需要其中的一个子集,编译器会做额外的工作,这可能会降低构建速度。

    有些人将常见的包含放在预编译的头文件中。

    您可能会争辩说,最好只在需要的地方包含头文件,在编译/读取时缩小范围。

    【讨论】:

    • 可能有一些误解。我已经编辑了这个问题。请审查它。我不希望编译器搜索必须包含的文件。
    • 看来你不想在任何 cpp 文件中输入 #include a_header.h 并告诉构建系统包含它,编译器尝试编译一个 cpp 文件然后去查找它可能是哪个头文件如果出现问题,则需要,因此形成一些所有符号的大查找表以在某处查找内容(有点像预编译的头文件)。为了节省一些打字,这有使事情变慢的危险。
    • 没有。实际上,我想指定一个要包含在每个要编译的文件中的文件。
    • 恐怕答案还是没有。
    • 请看问题下的@JVApens comment
    猜你喜欢
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    相关资源
    最近更新 更多