Xcode moltenvk项目makefile-如何通过clang链接

Xcode moltenvk项目makefile-如何通过clang链接,xcode,macos,clang,metal,vulkan,Xcode,Macos,Clang,Metal,Vulkan,这个文件:提供了一个很好的描述,说明了如何在XCode中将MoltenVK链接到使用它的项目 我更喜欢使用makefiles,因为它不需要启动XCode来构建(+这是一个与Linux上的同一项目一致的工作流) 问题是在指令中有相当多的OSX/XCode特定术语,我不太确定它如何转换为通过命令行运行clang 如果您假设我只希望使用指定的最小值来链接MoltenVK,这样的命令行参数会是什么样子? 以下是我的最小尝试: MOLTENVKDIR = /blah/vulkansdk-macos-1.1

这个文件:提供了一个很好的描述,说明了如何在XCode中将MoltenVK链接到使用它的项目

我更喜欢使用makefiles,因为它不需要启动XCode来构建(+这是一个与Linux上的同一项目一致的工作流)

问题是在指令中有相当多的OSX/XCode特定术语,我不太确定它如何转换为通过命令行运行
clang

如果您假设我只希望使用指定的最小值来链接MoltenVK,这样的命令行参数会是什么样子?

以下是我的最小尝试:

MOLTENVKDIR = /blah/vulkansdk-macos-1.1.108.0

a.out: my_headers.h my_src_files.cpp
    clang -I$(MOLTENVKDIR)/MoltenVK/include -L$(MOLTENVKDIR)/MoltenVK/macOS/dynamic -lMoltenVK my_src_files.cpp

更具体的问题:

我应该如何设置
LD\u运行路径\u搜索路径
?我假设这是一个
PATH
样式的变量,它嵌入到可执行文件中,并带有一个查找
MoltenVK.dylib
文件的位置列表

在《用户指南》的第4步中,它说“将(MoltenVK/macOS/dynamic/libMoltenVK.dylib)拖动到带有库的链接二进制文件列表”——这实际上是
-lMoltenVK
行吗

第五步从何而来?我是否应该附上<代码>框架金属框架基础框架…<代码>?我应该如何处理
.tbd
文件

步骤6是否只是确保相对于
a.out
复制
libMoltenVK.dylib
文件与
LD\u RUNPATH\u SEARCH\u路径一致


由于我没有使用XCode,可以安全地忽略步骤7吗?

TLDR;我使用g++,使用标志
-lMoltenVK
-L$(MOLTENVK\u DIR)
,并在顶部使用
导出VK\u ICD\u文件名=$(ICD\u DIR)
定义
VK\u ICD\u文件名

标题搜索路径为
-I$(路径)
库搜索路径为
-L$(路径)
运行路径搜索路径为
-rpath$(路径)
(带空格)

我所做的是将.dylibs复制到我的项目文件夹中名为
lib
的文件夹中,用
-Llib
设置库搜索路径,并用
-lvulkan
-lMoltenVK
链接它们。由于这些动态库是硬连接的,在链接时使用@rpath,因此我设置了
-rpath lib

您可以看到,它显示了在linux上为Vulkan生成Makefile的一个非常基本的版本(没有MoltenVK)

最重要的是,要想在调用vkCreateInstance(MoltenVK未正确安装)时不获得VkResult-9,请确保定义
VK_ICD_文件名
环境变量
我通过在Makefile顶部附近编写
export VK_ICD_FILENAMES=lib/MoltenVK_ICD.json
来实现这一点,并
MoltenVK_ICD.json
文件复制到我的项目中
这是一个指向动态库所在位置的文件,是MoltenVK工作所必需的。安装MoltenVK时,它与libMoltenVK.dylib位于同一文件夹中

同样,您必须定义
VK_LAYER_PATH
,验证层才能工作。 最低限度,MoltenVK所需的一切是:

export VK_ICD_FILENAMES=lib/MoltenVK_icd.json 
main:
    g++ test.cpp -o App -Llib -rpath lib -lMoltenVK
我不是最佳实践和惯例方面的专家,我做有效的事情。希望这有帮助