C++ 是否应将头文件添加到目标?

C++ 是否应将头文件添加到目标?,c++,xcode,build,C++,Xcode,Build,创建.h文件时,Xcode取消选中“目标”框。但通常会添加.cpp/.m/.mm文件 什么时候应该也不应该将.h文件视为生成系统中的目标?,因为.h文件包含在源文件中。“目标”是您必须自己编译的东西(“源文件”) 说我们有 foo.cpp #include "foo.h" ... ... lots more stuff here ... ... int main() { ... some code goes here ... } 然后编译器将把

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


什么时候应该也不应该将.h文件视为生成系统中的目标?

,因为.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
,因此它会被编译两次-这不是一个问题,因为头文件应该只包含可以多次编译到可执行文件中的内容-如果不是这样,“你做错了”


头文件,例如
.h
,通过C-pre处理器将
#包含到源文件中(在文本级别几乎是逐字),并集成到源文件的构建中,因此(通常)无需独立编译头文件。

我对其进行了编辑,使其更具一般性,因为它实际上不是一个特定于Xcode的问题,答案将适用于其他构建系统。此外,一个文件可能会在同一个.cpp文件中包含两次(例如,foo.cpp包括foo.h和bar.h,foo.h也包括bar.h),如果正确使用“包含防护装置”,这通常也不是问题。