Невозможно скомпилировать простую программу Metal с C++ из командной строки.C++

Программы на C++. Форум разработчиков
Anonymous
Невозможно скомпилировать простую программу Metal с C++ из командной строки.

Сообщение Anonymous »

Я пытаюсь начать создавать игру с использованием Metal на новом Macbook Pro с ОС Monterey. Я не хочу использовать 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 
#include 
#include 

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"
и хотя он находит заголовки, позже он терпит неудачу в некоторых глубоко спрятанных металлических файлах, которые пытаются ссылаться на платформу, например
Я знаю, что эти «фреймворки» (не знаю, что здесь имеется в виду, извините, я новичок в 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 и увидел в другом сообщении (здесь), что вы можете скопировать пакеты Xcode SDK в каталог некоторых фреймворков, который сделает его видимым при компиляции, но я понятия не имею, где их найти и действительно ли их следует скопировать в / Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks.
Я потратил на это часы, и кажется, что это единственные два способа, которыми люди могут добиться успеха. это означает использование Xcode или Cmake. Я уверен, что оба варианта хороши, но я новичок и хочу придерживаться простой компиляции из командной строки, пока я все еще учусь, и не хочу, чтобы непрозрачные и автоматические действия сборок Xcode запутывали то, что на самом деле происходит, а также Мне нравится разрабатывать в VSCode, и я не занимаюсь кроссплатформенными сборками или чем-то необычным, поэтому не хочу использовать Cmake.
По сути, я пытаюсь понять, как мне включите эти файлы Metal при компиляции моего кода!

Подробнее здесь: https://stackoverflow.com/questions/758 ... mmand-line

Вернуться в «C++»