CMake set_property命令,带有使用生成类型的生成器表达式

问题描述 投票:2回答:1

我正在使用v3.14.4和“ Visual Studio 15 2017 Win64”生成器创建CMake项目。在生成期间,还将编译.hlsl文件并将其存储在与.exe相同的目录中。某些原因导致我的hlsl文件VS_SHADER_OBJECT_FILE_NAME属性的生成器无法正确处理。

这是我的CMake声明:

set_property(SOURCE shader.hlsl PROPERTY VS_SHADER_OBJECT_FILE_NAME
  $<$<CONFIG:Release>:Release/shader.dxbc>
  $<$<CONFIG:Debug>:Debug/shader.dxbc>)

VS中的结果表明该表达式已基本通过。

$<$<CONFIG:Release>:Release/shader.dxbc>;$<$<CONFIG:Debug>:Debug/shader.dxbc>

我已经成功地将生成器与target_compile_definitions()语句一起使用,并且还支持set_property()。是我的用法格式错误还是更好的书写方式?

visual-studio cmake hlsl
1个回答
0
投票

正如Tsyvarev指出的,VS_SHADER_OBJECT_FILE_NAME属性不支持生成器表达式。一种解决方案是将编译的着色器复制到每种构建类型的所需目标,在这种情况下,该目录与.exe相同。下面的函数copy_compiled_shaderSHADERBC_FILE复制到使用生成器函数确定的新目录。

set_property(SOURCE shader.hlsl PROPERTY VS_SHADER_OBJECT_FILE_NAME shader.dxbc)

function(copy_compiled_shader SHADERBC_FILE)
  add_custom_command(
    TARGET TestCS
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E echo "Copying the shader ${SHADERBC_FILE}"
    COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SHADERBC_FILE} $<TARGET_FILE_DIR:TestCS>/${SHADERBC_FILE}
  )
endfunction()

copy_compiled_shader(shader.dxbc)
© www.soinside.com 2019 - 2024. All rights reserved.