Xcode moltenvk项目makefile-如何通过clang链接
这个文件:提供了一个很好的描述,说明了如何在XCode中将MoltenVK链接到使用它的项目 我更喜欢使用makefiles,因为它不需要启动XCode来构建(+这是一个与Linux上的同一项目一致的工作流) 问题是在指令中有相当多的OSX/XCode特定术语,我不太确定它如何转换为通过命令行运行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
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
我不是最佳实践和惯例方面的专家,我做有效的事情。希望这有帮助