Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio CMake set_属性命令与使用生成类型的生成器表达式_Visual Studio_Cmake_Hlsl - Fatal编程技术网

Visual studio CMake set_属性命令与使用生成类型的生成器表达式

Visual studio CMake set_属性命令与使用生成类型的生成器表达式,visual-studio,cmake,hlsl,Visual Studio,Cmake,Hlsl,我正在使用v3.14.4和“Visual Studio 15 2017 Win64”生成器创建一个CMake项目。在构建过程中,还将编译.hlsl文件并将其存储在与.exe相同的目录中。有东西阻止了hlsl文件的VS\u SHADER\u OBJECT\u file\u NAME属性的生成器的正确处理 这是我的CMake声明: set_property(SOURCE shader.hlsl PROPERTY VS_SHADER_OBJECT_FILE_NAME $<$<CONFI

我正在使用v3.14.4和“Visual Studio 15 2017 Win64”生成器创建一个CMake项目。在构建过程中,还将编译.hlsl文件并将其存储在与.exe相同的目录中。有东西阻止了hlsl文件的
VS\u SHADER\u OBJECT\u file\u NAME
属性的生成器的正确处理

这是我的CMake声明:

set_property(SOURCE shader.hlsl PROPERTY VS_SHADER_OBJECT_FILE_NAME
  $<$<CONFIG:Release>:Release/shader.dxbc>
  $<$<CONFIG:Debug>:Debug/shader.dxbc>)
set_属性(SOURCE shader.hlsl属性VS_shader_OBJECT_FILE_NAME
$
$)
VS中的结果显示表达式基本上是通过的

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

我已经成功地将生成器与
target\u compile\u definitions()
语句一起使用,并且还支持
set\u property()。我的用法是格式不正确还是以不同的方式编写更好?

正如Tsyvarev指出的那样,
VS\u SHADER\u OBJECT\u FILE\u NAME
属性不支持生成器表达式。一种解决方案是将编译后的着色器复制到每个生成类型所需的目标,在本例中是与.exe相同的目录。下面的函数
copy_compiled_shader
SHADERBC_文件
复制到使用生成器函数确定的新目录

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)
set_属性(SOURCE shader.hlsl属性VS_shader_OBJECT_FILE_NAME shader.dxbc)
函数(复制\u编译的\u着色器SHADERBC\u文件)
添加自定义命令(
目标测试
后期构建
命令${CMAKE_COMMAND}-E echo“复制着色器${SHADERBC_文件}”
命令${CMAKE_COMMAND}-E copy_if_不同${SHADERBC_FILE}$/${SHADERBC_FILE}
)
endfunction()
复制编译的着色器(shader.dxbc)

是否支持生成器表达式取决于属性(名称和类型)。由于不描述生成器表达式的用法,因此可以假定此属性不支持生成器表达式。比较,例如,与,它支持生成器表达式。我看到了,并将记住这一点。现在我已经添加了一个自定义命令,它正在将编译后的着色器放到我希望的位置。@PaulKippes如果您找到了问题的解决方案,请将该解决方案作为您问题的答案发布。请不要将答案嵌入问题帖子中。这样,其他有类似问题的人就可以找到解决方案,并了解是什么解决了问题。