【问题标题】:How can I add Vulkan to a cross platform CMake project? Example?如何将 Vulkan 添加到跨平台 CMake 项目?例子?
【发布时间】:2021-03-11 15:30:52
【问题描述】:

我想在我的 CMake 项目中使用 Vulkan 我应该如何进行?

查看 Vulkan 样本并不能真正揭示如何做事。许多教程坚持要求您修改自己的环境以使事情正常进行。

理想情况下,我只是希望它能够轻松工作,而不必担心包含目录/链接。

【问题讨论】:

    标签: cmake vulkan


    【解决方案1】:

    这就是 CMake 和开源的美妙之处。

    我在示例中使用的是 Windows / Visual Studio 2019,但这并不重要。

    首先下载Vulkan SDK:https://www.lunarg.com/vulkan-sdk/

    为了安全起见重新启动计算机(环境变量)。 VulkanSDK 将环境变量放到您的系统中。 (我知道从技术上讲,您不必重新启动计算机,但我不想上环境变量速成课程)

    现在我们可以进入 CMake。

    cmake_minimum_required(VERSION 3.19)
    
    project(EXAMPLE
        LANGUAGES CXX
    )
    
    find_package(Vulkan REQUIRED)
    
    add_executable(foobar)
    
    target_sources(foobar PRIVATE main.cpp)
    
    target_link_libraries(foobar PRIVATE Vulkan::Vulkan)
    

    这就是我的 main.cpp 的样子

    #include "vulkan/vulkan.h"
    #include <iostream>
    
    int main()
    {
        std::cout << "Hello World\n";
    }
    

    这就是我的 CMake 构建命令的样子:

    PS C:\git\vulkan_example> cmake -S . -B build
    -- Building for: Visual Studio 16 2019
    -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.21327.
    -- The CXX compiler identification is MSVC 19.29.29917.0
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Preview/VC/Tools/MSVC/14.29.29917/bin/Hostx64/x64/cl.exe - skipped
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Found Vulkan: C:/VulkanSDK/1.2.170.0/Lib/vulkan-1.lib  
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/git/vulkan_example/build
    PS C:\git\vulkan_example> cmake --build build --verbose
    Microsoft (R) Build Engine version 16.10.0-preview-21118-01+f0eebf287 for .NET Framework
    Copyright (C) Microsoft Corporation. All rights reserved.
    
    Build started 3/11/2021 10:20:28 AM.
    Project "C:\git\vulkan_example\build\ALL_BUILD.vcxproj" on node 1 (default targets).
    Project "C:\git\vulkan_example\build\ALL_BUILD.vcxproj" (1) is building "C:\git\vulkan_example\build\ZERO_CHECK.vcxproj" (2) on node 1 (default targets).
    PrepareForBuild:
      Creating directory "x64\Debug\ZERO_CHECK\".
      Creating directory "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\".
    InitializeBuildStatus:
      Creating "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
    CustomBuild:
      Checking Build System
    FinalizeBuildStatus:
      Deleting file "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild".
      Touching "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate".
    Done Building Project "C:\git\vulkan_example\build\ZERO_CHECK.vcxproj" (default targets).
    
    Project "C:\git\vulkan_example\build\ALL_BUILD.vcxproj" (1) is building "C:\git\vulkan_example\build\foobar.vcxproj" (3) on node 1 (default targets).
    PrepareForBuild:
      Creating directory "foobar.dir\Debug\".
      Creating directory "C:\git\vulkan_example\build\Debug\".
      Creating directory "foobar.dir\Debug\foobar.tlog\".
    InitializeBuildStatus:
      Creating "foobar.dir\Debug\foobar.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
    CustomBuild:
      Building Custom Rule C:/git/vulkan_example/CMakeLists.txt
    ClCompile:
      C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.29.29917\bin\HostX64\x64\CL.exe /c /IC:\VulkanSDK\1.2.170.0\Include /Zi /nologo /W1 /WX- /diagnostics:column /Od /Ob0 /D WIN32 /D _WIND
      OWS /D "CMAKE_INTDIR=\"Debug\"" /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /Fo"foobar.dir\Debug\\" /Fd"foobar.dir\Debug\vc142.pdb" /Gd /TP /errorReport:queue C:\git\vul 
      kan_example\main.cpp
      main.cpp
    Link:
      C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.29.29917\bin\HostX64\x64\link.exe /ERRORREPORT:QUEUE /OUT:"C:\git\vulkan_example\build\Debug\foobar.exe" /INCREMENTAL /NOLOGO "C:\Vulka
      nSDK\1.2.170.0\Lib\vulkan-1.lib" kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /m 
      anifest:embed /DEBUG /PDB:"C:/git/vulkan_example/build/Debug/foobar.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:/git/vulkan_example/build/Debug/foobar.lib" /MACHINE:X64  /machine:x64 foobar 
      .dir\Debug\main.obj
      foobar.vcxproj -> C:\git\vulkan_example\build\Debug\foobar.exe
    FinalizeBuildStatus:
      Deleting file "foobar.dir\Debug\foobar.tlog\unsuccessfulbuild".
      Touching "foobar.dir\Debug\foobar.tlog\foobar.lastbuildstate".
    Done Building Project "C:\git\vulkan_example\build\foobar.vcxproj" (default targets).
    
    PrepareForBuild:
      Creating directory "x64\Debug\ALL_BUILD\".
      Creating directory "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\".
    InitializeBuildStatus:
      Creating "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
    CustomBuild:
      Building Custom Rule C:/git/vulkan_example/CMakeLists.txt
    FinalizeBuildStatus:
      Deleting file "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\unsuccessfulbuild".
      Touching "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\ALL_BUILD.lastbuildstate".
    Done Building Project "C:\git\vulkan_example\build\ALL_BUILD.vcxproj" (default targets).
    
    
    Build succeeded.
        0 Warning(s)
        0 Error(s)
    
    Time Elapsed 00:00:01.19
    PS C:\git\vulkan_example>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-28
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 2018-11-25
      相关资源
      最近更新 更多