clion安装glfw_MacOS上使用Clion配置Vulkan开发环境
前言
學(xué)習(xí)圖形學(xué)編程的時(shí)候,其實(shí)在MacOS的編程環(huán)境默認(rèn)都是用Xcode,Windows又經(jīng)常用Visual Studio。但是因?yàn)槲医?jīng)常要在Windows 和 MacOS上切換編程,偶爾還得跑到Ubuntu上去,也不想反復(fù)的切換不同的IDE,所以我選擇了Clion。Clion 好的好處就是跨平臺(tái)的使用。
今天花了幾個(gè)小時(shí)在MacOS上配置了Clion+Vulkan的開(kāi)發(fā)環(huán)境,對(duì)于后期學(xué)習(xí)Vulkan做鋪墊。了解Clion的人都知道,Clion的C/C++編程采用的是cmake 做工程構(gòu)建,這樣子又可以逼迫我使用一個(gè)跨平臺(tái)的構(gòu)架方案,對(duì)于底層的工程構(gòu)建可以了如指掌,也可促使我更進(jìn)一步的了解和學(xué)習(xí)cmake。
我的工作環(huán)境
MacOS: Big Sur
gcc verson
~/C/V/shaders ??? gcc --versionConfigured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1Apple clang version 12.0.0 (clang-1200.0.32.27)Target: x86_64-apple-darwin20.2.0Thread model: posixInstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin配置Vulkan所需要的Lib
Vulkan的MacOS的配置主要參考Vulkan Tutorial的Development Environment。但是很對(duì)MacOS的文章只提供了XCode的配置,但是其實(shí)對(duì)于文件包的依賴都是一樣的。主要是需要三樣?xùn)|西: Vulkan SDK, GLFW,GLM.
我們分別看一下如何安裝這三樣?xùn)|西。
安裝Vulkan SDK
Vulkan SDK可以直接從https://vulkan.lunarg.com/sdk/home下載。其具體的安裝過(guò)程可參考Getting Started with the macOS Vulkan SDK。在具體安裝的環(huán)節(jié),我采用了Install the SDK - Alternate method using system paths這一步。即通過(guò)運(yùn)行sdk自帶的python安裝腳本來(lái)進(jìn)行安裝:
sudo ./install_vulkan.py腳本的運(yùn)行結(jié)果如下,主要是把vulkan sdk 的庫(kù)和頭文件分別安裝到了系統(tǒng)目錄 /usr/local下。
/usr/local/lib is one of the directories that linker searches for required libraries. 用戶安裝的lib一般都會(huì)放在/usr/local 這個(gè)folder內(nèi)。Clion搜索庫(kù)的依據(jù)主要來(lái)自于cmake 所定義的include_directories所指定的路徑。
Copying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/spirv-opt to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/vkvia to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/SPVRemapperTargets-release.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/SPIRV-Tools to /usr/local/lib/cmake/vulkan/SPIRV-ToolsCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/spirv-link to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/spirv-cfg to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libspirv-cross-c-shared.0.44.0.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/spirv-val to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/include/vulkan to /usr/local/include/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/SPIRVTargets.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libSPIRV.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/MoltenVKShaderConverter to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/glslangTargets-release.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/share/vulkan to /usr/local/share/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libshaderc_util.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libSPIRV-Tools.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/vulkaninfo to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/spirv-as to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libSPIRV-Tools-opt.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/SPIRVTargets-release.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/Applications/vkconfig.app to /Applications/vkconfig.appCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/glslangValidatorTargets.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/OGLCompilerTargets.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libspirv-cross-c-shared.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libspirv-cross-cpp.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/glslc to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/HLSLTargets.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/Applications/vkcubepp.app to /Applications/vkcubepp.appCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libGenericCodeGen.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libspirv-cross-c-shared.0.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libspirv-cross-glsl.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libspirv-cross-msl.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/spirv-remap to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/spirv-dis to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/include/spirv_cross to /usr/local/include/spirv_crossCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/SPIRV-Tools-link to /usr/local/lib/cmake/vulkan/SPIRV-Tools-linkCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/SPVRemapperTargets.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/dxc-3.7 to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/SPIRV-Tools-opt to /usr/local/lib/cmake/vulkan/SPIRV-Tools-optCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/OGLCompilerTargets-release.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/glslangValidator to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/spirv-lesspipe.sh to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/Applications/vkcube.app to /Applications/vkcube.appCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/HLSLTargets-release.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/spirv-remapTargets.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/glslangValidatorTargets-release.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libSPIRV-Tools-link.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libspirv-cross-c.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/spirv-reflect to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/Applications/vulkaninfo.app to /Applications/vulkaninfo.appCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libspirv-cross-hlsl.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/include/shaderc to /usr/local/include/shadercCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libSPIRV-Tools-reduce.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libshaderc_combined.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libspirv-cross-util.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libvulkan.1.2.162.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libOGLCompiler.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libshaderc_shared.1.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libSPIRV-Tools-shared.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libvulkan.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libOSDependent.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libshaderc.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/include/spirv-tools to /usr/local/include/spirv-toolsCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/SPIRV-Tools-reduce to /usr/local/lib/cmake/vulkan/SPIRV-Tools-reduceCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libglslang.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libdxcompiler.3.7.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libMoltenVK.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libspirv-cross-reflect.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libHLSL.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libdxcompiler.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/spirv-cross to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libVkLayer_khronos_validation.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/include/glslang to /usr/local/include/glslangCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/spirv-reduce to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/OSDependentTargets.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/bin/dxc to /usr/local/binCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libspirv-cross-core.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libSPVRemapper.a to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libVkLayer_api_dump.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/spirv-remapTargets-release.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/OSDependentTargets-release.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libvulkan.1.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/cmake/glslangTargets.cmake to /usr/local/lib/cmake/vulkanCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libshaderc_shared.dylib to /usr/local/libCopying /Volumes/vulkansdk-macos-1.2.162.0/macOS/lib/libMachineIndependent.a to /usr/local/lib安裝GLFW
GLFW是用來(lái)創(chuàng)建window的,它支持不同的操作系統(tǒng)的。無(wú)論是OpenGL還是Vulkan,它們的只負(fù)責(zé)圖形渲染到內(nèi)存中用于顯示到屏幕的桌面上,至于最后每個(gè)操作系統(tǒng)的桌面的創(chuàng)建,GL跟Vulkan都不負(fù)責(zé)。這就是GLFW的工作了。在蘋果上,glfw可以通過(guò)brew來(lái)安裝。我的mac已經(jīng)安裝好了brew,所以就直接通過(guò)brew來(lái)安裝glfw就好了。
brew install glfw安裝GLM
Vulkan也不包含線性代數(shù)的數(shù)學(xué)庫(kù)。所以我們之后做圖形變化的時(shí)候,需要用到GLM。他也可以通過(guò)brew 來(lái)安裝。
brew install glm安裝以上所有需要的libs之后,我們可以設(shè)定一個(gè)shell 的profile 里設(shè)定自己的環(huán)境變量。這些設(shè)定的環(huán)境變量將用來(lái)為我后之后在clion IDE里使用cmake配置文件時(shí)指明需要搜索的庫(kù)的路徑。因?yàn)槲矣玫氖莦sh,所以,我在~/.zprofile 里添加了glfw和glm的lib的路徑。
export GLFW_HOME="/usr/local/Cellar/glfw/3.3.2"export GLM_HOME="/usr/local/include/glm"備注:brew 會(huì)把所有的安裝都在一個(gè)叫Cellar的目錄下,然后在/usr/local 下創(chuàng)建soft link連接到這些在Cellar下的目錄。
然后我們重新source一下我.zprofile.
當(dāng)一些都配置好了后,可以調(diào)用vksdk的命令vkvia來(lái)查詢vulkan是否成功安裝了。
也可以run一下vulkan sdk的 cube app來(lái)看一下。
創(chuàng)建Clion 項(xiàng)目
讓我們的創(chuàng)建一個(gè)VulkanDemo 項(xiàng)目。項(xiàng)目創(chuàng)建后非常簡(jiǎn)單,只有一個(gè)main.cpp 的helloworld代碼。
這里我們來(lái)畫(huà)一個(gè)三角形,所有,讓我們配置cmake file 保證所需要的頭文件和庫(kù)都被正確的加載了。
cmake_minimum_required(VERSION 3.17)project(VulkanDemo)set(CMAKE_CXX_STANDARD 17)# 檢查環(huán)境變量if (NOT DEFINED ENV{GLFW_HOME}) ? ?message(FATAL_ERROR "found no env named GLFW_HOME")endif()if (NOT DEFINED ENV{GLM_HOME}) ? ?message(FATAL_ERROR "found no env named GLM_HOME")endif()# 暫存環(huán)境變量set(GLFW_HOME $ENV{GLFW_HOME})set(GLM_HOME $ENV{GLM_HOME})add_executable(VulkanDemo main.cpp)# 添加 GLFW3 預(yù)編譯庫(kù)add_library(glfw SHARED IMPORTED)SET_TARGET_PROPERTIES(glfw PROPERTIES IMPORTED_LOCATION "${GLFW_HOME}/lib/libglfw.3.dylib")# GLMinclude_directories(${GLM_INCLUDE_DIRS})# Vulkanfind_package(Vulkan REQUIRED FATAL_ERROR)target_link_libraries(${PROJECT_NAME} glfw Vulkan::Vulkan)#include_directories(${Vulkan_INCLUDE_DIRS})#target_include_directories(${PROJECT_NAME} PUBLIC ${Vulkan_INCLUDE_DIRS})# copy the shader files to the cmake-build-debug folderfile(COPY shaders DESTINATION ${CMAKE_CURRENT_BINARY_DIR})cmake 配置好后我們開(kāi)始畫(huà)我么你的三角形。這篇文章直接用了Vulkan Tutorial的代碼。把代碼 復(fù)制到main.cpp 里。因?yàn)楫?huà)三角形我們這里要用到兩個(gè)shaders。shader的代碼來(lái)自這一章節(jié)。所以我們需要添加兩個(gè)shader文件,和一個(gè)compile 腳本幫我們生成SPIR-V文件。
大家可能留意到,cmake 的配置文件最后一行我用到了file(COPY shaders DESTINATION ${CMAKE_CURRENT_BINARY_DIR}),主要因?yàn)樵趍ain的代碼里調(diào)用了openfile 需要打開(kāi)我們的shader文件。但是Clion run 項(xiàng)目的二進(jìn)制文件的時(shí)候,它假設(shè)資源文件是放在cmake-build-debug這個(gè)文件夾里。所以我們必須把shader文件夾復(fù)制到cmake-build-debug里。
來(lái)看一下我么你的項(xiàng)目的整體的樣子:
好了,最后,我們?cè)赾lion里運(yùn)行我們的VulkanDemo程序吧。一個(gè)三角形孕育而生!
總結(jié)
以上是生活随笔為你收集整理的clion安装glfw_MacOS上使用Clion配置Vulkan开发环境的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql 优化方法_Mysql的优化方
- 下一篇: 查看journalnode节点状态信息_