使用 CMake 在 MacOS 上构建 C++ 代码时出错。可可粉和粉底的错误

问题描述 投票:0回答:1

我正在尝试在 MacOS 上构建一个用 C++ 编写的跨平台应用程序。在我的 CMake 中我已经包含了

cmake_minimum_required(VERSION 3.28)
project(lel LANGUAGES C CXX)

if(APPLE)
    enable_language(OBJC)
endif()

在我的 .cpp 文件中,我还包含了以下内容:

#if defined(SDL_PLATFORM_MACOS)
#include <Cocoa/Cocoa.h>
#include <Foundation/Foundation.h>
#include <QuartzCore/CAMetalLayer.h>

我得到的错误如下:

In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h:12:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:9:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:601:1: error: expected unqualified-id
@class NSString, Protocol;

我知道原因是MacOS使用Objective C来构建程序,而代码库是C++。但我不知道如何解决这个问题。我尝试用

包装我的包含内容
#ifdef __OBJC__
#include <Cocoa/Cocoa.h>
#include <Foundation/Foundation.h>
#include <QuartzCore/CAMetalLayer.h>
#endif

但它只会导致错误,指出它无法识别包含中包含的任何“类型”。

如何解决这个问题?预先感谢。

c++ objective-c macos cmake cross-platform
1个回答
0
投票

如果要编写 Objective-C 代码或在 C++ 文件中包含 Objective-C 头文件,则需要将

.cc
.cpp
扩展名重命名为
.mm

在我的 .cpp 文件中,我还包含了以下内容:

#if defined(SDL_PLATFORM_MACOS)
#include <Cocoa/Cocoa.h>
#include <Foundation/Foundation.h>
#include <QuartzCore/CAMetalLayer.h>

您在 C++ 文件中包含 Objective-C 标头。我建议点击 this stackoverflow 答案

中的链接
© www.soinside.com 2019 - 2024. All rights reserved.