【问题标题】:Should Header files be added to the target?是否应该将头文件添加到目标?
【发布时间】:2014-06-12 16:05:46
【问题描述】:

当您创建一个 .h 文件时,Xcode 取消选中“目标”框。但通常会添加 .cpp / .m / .mm 文件。

什么时候应该和不应该将 .h 文件视为构建系统中的目标?

【问题讨论】:

  • 我对其进行了编辑以使其更加通用,因为它实际上并不是一个特定于 Xcode 的问题,并且答案将适用于其他构建系统。

标签: c++ xcode build


【解决方案1】:

因为 .h 文件包含在您的源文件中。 “目标”是您必须自己编译的东西(“源文件”)。

假设我们有

foo.cpp

  #include "foo.h"

  ... 
  ...  lots more stuff here ... 
  ...

  int main()
  {
     ... some code goes here ... 
  }

然后编译器会将foo.cpp 编译为目标文件,并使用链接器组件将其编译为可执行文件。

foo.h 文件包含在您的foo.cpp 中,并在那里编译。如果我们有一个复杂的项目,bar.cpp 也可能包含foo.h,所以它会被编译两次——这不是问题[通常],因为头文件应该只包含可以多次编译到可执行文件中的东西——如果不是这样,“你做错了”。

【讨论】:

  • 此外,一个文件可能会在同一个 .cpp 文件中包含两次(例如 foo.cpp 包含 foo.h 和 bar.h,而 foo.h 还包含 bar.h),这也是如果您正确使用包含防护,通常不会有问题。
【解决方案2】:

.cpp / .m.mm 等源文件被编译成二进制文件(通常是 .obj 文件)。

头文件,例如.h,通过 C 预处理器将 #include 编入源文件(在文本级别几乎逐字记录),并集成到源文件的构建中,因此(通常)不需要独立编译头文件。

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 2022-01-12
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2022-09-26
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多