如何使用 CMake 构建 Apple 的 Metal-cpp 示例?
How to build Apple's Metal-cpp example using CMake?
最近,Apple 发布了一个库,可以直接使用 C++ 使用 Metal。我在 Xcode 中在线找到的示例 (https://github.com/moritzhof/metal-cpp-examples), works if I copy the source code and follow the steps outlined by Apple (https://developer.apple.com/metal/cpp/)。我不使用包含的 Xcode 项目文件,以避免任何“隐藏”设置。
现在我正在尝试使用 CMake 构建相同的示例,CMakeLists.txt:
cmake_minimum_required(VERSION 3.8)
project(HelloWorld)
set(CMAKE_CXX_STANDARD 17)
include_directories(${PROJECT_SOURCE_DIR}/metal-cpp)
set(SOURCE_FILES metal-cpp-test/main.cpp metal-cpp-test/metal_adder.cpp)
add_executable(program ${SOURCE_FILES})
# specify which libraries to connect
# target_link_libraries(program ${METAL})
# target_link_libraries(program ${FOUNDATION})
# target_link_libraries(program ${QUARTZCORE})
find_library(METAL Metal)
find_library(FOUNDATION Foundation)
find_library(QUARTZCORE QuartzCore)
target_link_libraries(program stdc++ "-framework Metal" "-framework Foundation" "-framework QuartzCore" objc)
编译成功,但是行
auto lib = _device->newDefaultLibrary();
现在似乎 return 一个空指针。知道这可能是什么原因以及如何解决这个问题吗?
构建应用程序的 Xcode 项目中的所有 .metal 文件都被编译并构建到单个 默认库 .
_device->newDefaultLibrary()
return 一个包含来自 默认库 的函数的新库对象。如果找不到 默认库 ,则此方法 return 无效。
由于您没有使用 Xcode,您应该 manually compile 金属着色语言源代码并构建一个金属库。
然后,在运行时,调用 newLibrary(filePath, &error)
方法来检索和访问您的库作为 MTL::Library
对象。
NS::String* filePath = NS::String::string("The full file path to a .metallib file", NS::UTF8StringEncoding);
NS::Error* error;
auto library =_device->newLibrary(filePath, &error);
if(error)
{
}
最近,Apple 发布了一个库,可以直接使用 C++ 使用 Metal。我在 Xcode 中在线找到的示例 (https://github.com/moritzhof/metal-cpp-examples), works if I copy the source code and follow the steps outlined by Apple (https://developer.apple.com/metal/cpp/)。我不使用包含的 Xcode 项目文件,以避免任何“隐藏”设置。
现在我正在尝试使用 CMake 构建相同的示例,CMakeLists.txt:
cmake_minimum_required(VERSION 3.8)
project(HelloWorld)
set(CMAKE_CXX_STANDARD 17)
include_directories(${PROJECT_SOURCE_DIR}/metal-cpp)
set(SOURCE_FILES metal-cpp-test/main.cpp metal-cpp-test/metal_adder.cpp)
add_executable(program ${SOURCE_FILES})
# specify which libraries to connect
# target_link_libraries(program ${METAL})
# target_link_libraries(program ${FOUNDATION})
# target_link_libraries(program ${QUARTZCORE})
find_library(METAL Metal)
find_library(FOUNDATION Foundation)
find_library(QUARTZCORE QuartzCore)
target_link_libraries(program stdc++ "-framework Metal" "-framework Foundation" "-framework QuartzCore" objc)
编译成功,但是行
auto lib = _device->newDefaultLibrary();
现在似乎 return 一个空指针。知道这可能是什么原因以及如何解决这个问题吗?
构建应用程序的 Xcode 项目中的所有 .metal 文件都被编译并构建到单个 默认库 .
_device->newDefaultLibrary()
return 一个包含来自 默认库 的函数的新库对象。如果找不到 默认库 ,则此方法 return 无效。
由于您没有使用 Xcode,您应该 manually compile 金属着色语言源代码并构建一个金属库。
然后,在运行时,调用 newLibrary(filePath, &error)
方法来检索和访问您的库作为 MTL::Library
对象。
NS::String* filePath = NS::String::string("The full file path to a .metallib file", NS::UTF8StringEncoding);
NS::Error* error;
auto library =_device->newLibrary(filePath, &error);
if(error)
{
}