强制将特定文件编译为 Objective-C/文件类型,但将整个项目编译为 Objective-C++

Posted

技术标签:

【中文标题】强制将特定文件编译为 Objective-C/文件类型,但将整个项目编译为 Objective-C++【英文标题】:force to compile a specific file as Objective-C/file type, but the entire project as Objective-C++ 【发布时间】:2014-01-18 00:15:30 【问题描述】:

我正在向一个已经存在的项目添加一些功能。它按预期工作。

然后我从一个打开的库中向该项目添加了几个文件。

现在,Xcode 无法编译整个项目。

调查原因,我发现问题是“编译源为”标志,它默认设置为“Objective-C++”。

将该标志切换为其他值会使 Xcode 抱怨。在任何情况下都有数百个错误。 我的想法是以前的开发人员这样做是为了避免将 .c、.cpp、.m 重命名为 .mm。他已经不在这里了。所以,很难说。

知道如何解决这个问题吗? 我看到几个选项:

    根据需要重命名文件。这意味着数百 文件重命名。或者 我强制 Xcode 将特定文件编译为 Objective-C/file 类型,但整个项目为 Objective-C++ 或 我创建了一个小项目,然后生成了一个共享库。

我想继续选项 2。可以吗?以及如何?

还有什么想法吗?

谢谢

【问题讨论】:

你试过在侧面板的Identity和Type中设置文件的类型吗?如果将文件类型更改为 Objective-C,无论扩展名是什么,它都会编译为 Objective-C。 @StephenJohnson 这应该是一个答案,确定吗?即 Xcode 允许选项(2),这是相关的下拉菜单...(编辑:(1)也不会很难自动化,请参见例如reviews.cnet.com/8301-13727_7-57411491-263/…) @Stephen Johnson:试过了。没用。 @Tommy:问题在于,并非所有东西都是 Objective-C++。我必须有选择地将 .m、.c、.m 更改为 .mm。假设如果一个 Objective-C++ 包含在一个 Objective-C 文件中,那么最后一个也需要是 Objective C++ 从长远来看,选项 1 更好。这可能需要一些时间,但最终您将拥有每个人都能理解的一致的源文件名。 【参考方案1】:

我采用了最简单的方法:强制 Xcode 将特定文件编译为 Objective-C,但将整个项目编译为 Objective-C++。

在 Build Phases 的每个文件中添加了编译器标志 -x objective-c> 'Compile source as'

【讨论】:

以上是关于强制将特定文件编译为 Objective-C/文件类型,但将整个项目编译为 Objective-C++的主要内容,如果未能解决你的问题,请参考以下文章

create-react-app 如何在构建过程中将特定的 .ts 文件编译为 .js 文件?

将Gulp编译为父文件夹

如何强制 MSBuild 编译为 32 位模式?

将 Objective-C++ 文件添加到 C++ Xcode 5 项目

Xamarin 无法编译为本机代码

如何将 C++ 文件编译为 WebAssembly?