无法从命令行用 C++ 编译简单的 Metal 程序

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

我正在尝试开始在装有 OS Monterey 的新 Macbook Pro 上使用 Metal 制作游戏。我不想使用 xcode,可能会使用 make 文件,但首先我只想用它编译最简单的应用程序来测试它是否有效。

我按照官方文档中列出的步骤下载了 metal-cpp 项目并将其解压缩到我的项目根目录中。我的文件夹看起来像这样:

root
  main.cpp
  metal-cpp
    ... all the metal files here

我的主文件很简单

#define NS_PRIVATE_IMPLEMENTATION
#define CA_PRIVATE_IMPLEMENTATION
#define MTL_PRIVATE_IMPLEMENTATION
#include <Foundation/Foundation.hpp>
#include <Metal/Metal.hpp>
#include <QuartzCore/QuartzCore.hpp>

int main() {

}

现在,当我尝试使用这样的命令编译它时

clang++ -std=c++20 -stdlib=libc++ -g ./main.cpp -o ./main -I/usr/local/include -L/usr/local/lib

clang++ -std=c++20 -stdlib=libc++ -g ./main.cpp -o ./main -I/usr/local/include -L/usr/local/lib -framework Metal -framework Foundation -framework QuartzCore

我得到这样的错误

fatal error: 'Foundation/Foundation.hpp' file not found
 note: did not find header 'Foundation.hpp' in framework 'Foundation' (loaded from '/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks')

我也试过包括像这样的直接路径

#include "metal-cpp/Foundation/Foundation.hpp"
#include "metal-cpp/Metal/Metal.hpp"
#include "metal-cpp/QuartzCore/QuartzCore.hpp"

虽然它找到了标题,但它后来在一些试图引用框架的深埋金属文件中失败了

<Foundation/Foundation.hpp>

我知道这些“框架”(不知道这是什么意思,对不起,我是 C++ 的新手,编译的东西超出了 hello world)在像

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks
这样的目标位置不存在,所以我也试过

clang++ -std=c++20 -stdlib=libc++ -g ./main.cpp -o ./main -I/usr/local/include -I./metal-cpp -L/usr/local/lib -L./metal-cpp -framework Metal -framework Foundation -framework QuartzCore

但我仍然得到同样的错误。我已经下载了 Xcode 并在另一篇文章(here)中看到您可以将 Xcode SDK 包复制到一些框架目录,这将在编译时使其可见,但我不知道在哪里可以找到它们或者是否真的应该复制它们到

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks
.

我在这上面花了好几个小时,似乎人们完成这个的唯一两种方法是使用 Xcode 或 Cmake。我确定这两个都很好,但我是初学者,我想在学习的同时坚持简单的命令行编译,并且不希望 Xcode 构建的不透明和自动操作混淆了真正发生的事情,而且我喜欢在 VSCode 中开发,我不做跨平台构建或任何花哨的东西,所以我不想使用 Cmake。

所以基本上我想弄清楚的是我在编译代码时如何包含这些 Metal 文件!

c++ xcode compilation metal clang++
© www.soinside.com 2019 - 2024. All rights reserved.