前言

学习图形学编程的时候,其实在MacOS的编程环境默认都是用Xcode,Windows又经常用Visual Studio。但是因为我经常要在Windows 和 MacOS上切换编程,偶尔还得跑到Ubuntu上去,也不想反复的切换不同的IDE,所以我选择了Clion。Clion 好的好处就是跨平台的使用。

今天花了几个小时在MacOS上配置了Clion+Vulkan的开发环境,对于后期学习Vulkan做铺垫。了解Clion的人都知道,Clion的C/C++编程采用的是cmake 做工程构建,这样子又可以逼迫我使用一个跨平台的构架方案,对于底层的工程构建可以了如指掌,也可促使我更进一步的了解和学习cmake。

我的工作环境

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。但是很对MacOS的文章只提供了XCode的配置,但是其实对于文件包的依赖都是一样的。主要是需要三样东西: Vulkan SDK, GLFW,GLM.

我们分别看一下如何安装这三样东西。

安装Vulkan SDK

Vulkan SDK可以直接从https://vulkan.lunarg.com/sdk/home下载。其具体的安装过程可参考Getting Started with the macOS Vulkan SDK。在具体安装的环节,我采用了Install the SDK - Alternate method using system paths这一步。即通过运行sdk自带的python安装脚本来进行安装:

sudo ./install_vulkan.py

脚本的运行结果如下,主要是把vulkan sdk 的庫和头文件分别安装到了系统目录 /usr/local下。

/usr/local/lib is one of the directories that linker searches for required libraries. 用户安装的lib一般都会放在/usr/local 这个folder内。Clion搜索庫的依据主要来自于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是用来创建window的,它支持不同的操作系统的。无论是OpenGL还是Vulkan,它们的只负责图形渲染到内存中用于显示到屏幕的桌面上,至于最后每个操作系统的桌面的创建,GL跟Vulkan都不负责。这就是GLFW的工作了。在苹果上,glfw可以通过brew来安装。我的mac已经安装好了brew,所以就直接通过brew来安装glfw就好了。

brew install glfw

安装GLM

Vulkan也不包含线性代数的数学庫。所以我们之后做图形变化的时候,需要用到GLM。他也可以通过brew 来安装。

brew install glm

安装以上所有需要的libs之后,我们可以设定一个shell 的profile 里设定自己的环境变量。这些设定的环境变量将用来为我后之后在clion IDE里使用cmake配置文件时指明需要搜索的庫的路径。因为我用的是zsh,所以,我在~/.zprofile 里添加了glfw和glm的lib的路径。

export GLFW_HOME="/usr/local/Cellar/glfw/3.3.2"export GLM_HOME="/usr/local/include/glm"

备注:brew 会把所有的安装都在一个叫Cellar的目录下,然后在/usr/local 下创建soft link连接到这些在Cellar下的目录。

然后我们重新source一下我.zprofile.

当一些都配置好了后,可以调用vksdk的命令vkvia来查询vulkan是否成功安装了。

也可以run一下vulkan sdk的 cube app来看一下。

创建Clion 项目

让我们的创建一个VulkanDemo 项目。项目创建后非常简单,只有一个main.cpp 的helloworld代码。

这里我们来画一个三角形,所有,让我们配置cmake file 保证所需要的头文件和庫都被正确的加载了。

cmake_minimum_required(VERSION 3.17)project(VulkanDemo)set(CMAKE_CXX_STANDARD 17)# 检查环境变量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()# 暂存环境变量set(GLFW_HOME $ENV{GLFW_HOME})set(GLM_HOME $ENV{GLM_HOME})add_executable(VulkanDemo main.cpp)# 添加 GLFW3 预编译库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 配置好后我们开始画我么你的三角形。这篇文章直接用了Vulkan Tutorial的代码。把代码 复制到main.cpp 里。因为画三角形我们这里要用到两个shaders。shader的代码来自这一章节。所以我们需要添加两个shader文件,和一个compile 脚本帮我们生成SPIR-V文件。

大家可能留意到,cmake 的配置文件最后一行我用到了file(COPY shaders DESTINATION ${CMAKE_CURRENT_BINARY_DIR}),主要因为在main的代码里调用了openfile 需要打开我们的shader文件。但是Clion run 项目的二进制文件的时候,它假设资源文件是放在cmake-build-debug这个文件夹里。所以我们必须把shader文件夹复制到cmake-build-debug里。

来看一下我么你的项目的整体的样子:

好了,最后,我们在clion里运行我们的VulkanDemo程序吧。一个三角形孕育而生!

clion安装glfw_MacOS上使用Clion配置Vulkan开发环境相关推荐

  1. IntelliJ IDEA 2019 配置 PHP 开发环境及创建 PHP 项目

    目录 安装 appserv IntelliJ IDEA 2019 配置 PHP 开发环境 IntelliJ IDEA 2019 创建 PHP 项目 安装 appserv appserv-win32-2 ...

  2. Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

    本文为Flutter开发环境在macOS下安装全过程: 一.系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不 ...

  3. mac上配置php开发环境,Mac配置PHP开发环境

    求教怎么在Mac配置PHP开发环境,小弟跪谢了! 这是我写的Mac安装Lnmp的教程,你可以看下 Mac配置Lnmp环境 Mac中自带Apache,输入 sudo apachectl start 启动 ...

  4. 安装与配置Flutter开发环境

    这篇博客我们介绍了Flutter,并且对比了H5,React Native,Flutter. 由于Flutter是跨平台的开发框架,开发一次可以同时运行在Android和iOS上面,所以我们开发时最好 ...

  5. eclipse配置python环境后啷个写java类_在Eclipse上配置Python开发环境

    问题导读: 1.什么是PyDev?2.如何安装PyDev? 3.安装Eclipse过程中如何解决遇到的问题? 1.jpg (33.67 KB, 下载次数: 3) 2016-3-7 14:31 上传本文 ...

  6. Windows系统下安装配置 MinGW-w64 开发环境

    MinGW.MinGW-w64 简介 MinGW(全称为,Minimalist GNU for Windows),它实际上是将经典的开源 C语言编译器 GCC 移植到了 Windows 平台下,并且包 ...

  7. python开发工具及环境配置_python_在windows下安装配置python开发环境及Ulipad开发工具...

    最近开始学习Python,在网上寻找一下比较好的IDE.因为以前用C#做开发的,用Visual Studio作为IDE,鉴于用惯了VS这么强大的IDE,所以对IDE有一定的依赖性. Python的ID ...

  8. 从零开始,教你如何安装、配置Python开发环境,Python入门安装教程,超级详细

    近日,我鼓起勇气从头开始正儿八经地配置一个更轻量.更趁手的 Python 开发环境.经过一番折腾,我比较顺利地在 Windows 10 上配置了一个比较满意的 Python 环境: 安装稳定版本的 P ...

  9. 基于Anaconda配置Python开发环境详解(1)安装Anaconda并做基本配置

    本系列帖子将从纯小白的视角讲解新手使用Anaconda配置Python开发环境全流程,使用Pycharm编辑器.conda包管理器. 第一节是关于Anaconda安装的 什么是conda conda是 ...

最新文章

  1. (每日一题)2016 北京ICPC网络赛G hihocoder 1388 (中国剩余定理 + NTT)
  2. python第一周心得体会_Python学习第一周学习总结
  3. 程序员面试金典 - 面试题 03.05. 栈排序(两栈)
  4. 程序员面试HR你该看重什么?!
  5. 原生JavaScript如何解决父元素查找指定类名的子元素的问题
  6. Starling常见问题解决办法
  7. android fragment实例化,Android使得Fragment 切换时不重新实例化
  8. Django MTV - 模型层 - (专题)知识要点与实战案例
  9. Miller Robbin测试模板(无讲解)
  10. 计算机视觉基本研究方向
  11. HDU6135 拓展KMP模板
  12. 【电路与电子技术】笔记 (完结)
  13. ab测试工具结果分析
  14. mac上解决Resource temporarily unavailable
  15. 宏碁服务器u盘装系统,宏基笔记本用u盘装系统操作流程
  16. PHP微信公众号开发之:获得和缓存access_token,原理及代码
  17. SoK: The Faults in our ASRs: An Overview of Attacks against Automatic Speech Recognition (题目过长)阅读笔记
  18. Huffman Coding 哈夫曼树
  19. 【原创】PHP扩展开发入门
  20. 鸿湖万联与龙芯中科共建“芯片+操作系统”全自主产业生态链

热门文章

  1. windows/Linux 安装 MongoDB 3.6.5
  2. 循环队列-队列的顺序表示和实现
  3. 什么是连续潮流cpf_2019童装秋冬潮流趋势报告:一文读懂童装潮流四大消费趋势...
  4. Spring-Bean的依赖注入分析-01
  5. 微服务【1.1】Swagger的使用
  6. Go——Artifactory的AQL查询以及json解析解决方案
  7. JetBrains —— JetBrains系列IDE优化配置(提高启动和运行速度)
  8. CG CTF WEB 文件包含
  9. 自定义configureMessageConverters和ObjectMapper解决json序列化问题实例
  10. 直接输入地址访问服务器上的静态资源