Xcode and C++ Headers

Xcode and C++ Headers

本文关键字:Headers C++ and Xcode      更新时间:2023-10-16

我有一个关于在Xcode的Objective-C++模块中使用C++头文件的问题。具体来说,为什么我可以在源文件中 #include 它们,而不是头文件?

下面是一个具体示例。

我正在使用Xcode 7.2.1,有两个项目。第一个是我打包到"myFramework.framework"中的C++框架。它公开了"myFramework.h",而"myFramework.h"又拉入了"myLib.h"。 "myLib.h"的顶部是一个"#include <字符串>"。

第二个项目是一个使用上述框架的Objective-C iOS应用程序。在这个项目中,"myViewController.mm"(Objective-C++源代码)的顶部有"#import "myFramework/myFramework.h",并引用了该头文件中定义的内容。

在这一点上,一切都很好。 它的构建和运行没有问题。

当我将"#import myFramework/myFramework.h"行移动到"myViewController.h"时,编译失败,因为它找不到"标头依赖项。

如果我将"myViewController.h"的文件类型从普通的旧"C Header"更改为Objective-C++标头,这并不重要。 无论哪种方式,Xcode 的标头搜索路径都不会查找标准的 C++ 标头。

所以我的主要问题是为什么它会这样?为什么仅仅因为 #include/#import 在头文件中就被区别对待?

我的第二个问题是,当 Xcode 在头文件中而不是源文件中时,是否有某种方法可以让 Xcode 将 #include/#import 视为相同?

多谢!

您确定在编译myViewController.mm文件时出现错误吗?

检查myViewController.h是否被导入到其他非 ObjC++ 文件中(并且该文件是编译失败的文件)。

我怀疑在其他标头中包含C++标头的问题在于Objective-C源文件可以看到C++头文件,这使它感到不安。

如果你混合了C++/Objective-C++/Objective-C,那么你最好只

向项目中的其他模块公开一个纯的Objective-C接口,并且只在Objective-C++源文件中包含任何C++头文件。

或者,让所有内容都C++目标,然后你根本不需要担心它。

希望这也回答了你的第二个问题。