【发布时间】:2014-06-12 16:05:46
【问题描述】:
当您创建一个 .h 文件时,Xcode 取消选中“目标”框。但通常会添加 .cpp / .m / .mm 文件。
什么时候应该和不应该将 .h 文件视为构建系统中的目标?
【问题讨论】:
-
我对其进行了编辑以使其更加通用,因为它实际上并不是一个特定于 Xcode 的问题,并且答案将适用于其他构建系统。
当您创建一个 .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,所以它会被编译两次——这不是问题[通常],因为头文件应该只包含可以多次编译到可执行文件中的东西——如果不是这样,“你做错了”。
【讨论】:
.cpp / .m 和 .mm 等源文件被编译成二进制文件(通常是 .obj 文件)。
头文件,例如.h,通过 C 预处理器将 #include 编入源文件(在文本级别几乎逐字记录),并集成到源文件的构建中,因此(通常)不需要独立编译头文件。
【讨论】: