【发布时间】:2021-01-08 17:55:15
【问题描述】:
我遇到了与 CMake 中的多配置生成器相关的问题。 任务很简单:我只想将一些文件(glsl 着色器)复制到运行时目录中(以便在运行时读取可执行文件)。
我有以下目标层次结构:我有库(DLL)目标和可执行文件,将由用户创建。然后库与可执行文件链接。这就是问题所在。 我使用了以下代码:
configure_file("${SHADER_SRC}" "${CMAKE_RUNTIME_OUTPUT_DIR}/shaders/${SHADER_OUTPUT_FILENAME}" COPYONLY)
它会产生类似的构建树:
- 二进制目录
- BUILD_TYPE(例如,调试)
- 斌
- 着色器
- 我的文件在这里。工作正常
- 其他目标
- 着色器
- 斌
- BUILD_TYPE(例如,调试)
它适用于单一配置生成器。
但是当我开始使用Visual Studio 16 2019 多配置生成器时,会发生以下情况:
- 二进制目录
- BUILD_TYPE
- 斌
- 着色器
- 我的文件在这里。工作正常
- BUILD_TYPE
- 其他目标 可执行文件不再看到着色器,因为它们位于错误的目录中。 如何解决这个问题?
- 着色器
- 斌
- BUILD_TYPE
附:
我也用过add_custom_command 版本:
set(SHADER_OUTPUT_FILENAME "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/shaders/${SHADER_FILENAME}")
add_custom_command(
TARGET ${LIBRARY_TARGET_NAME} PRE_BUILD
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMENT "Copying shader (${SHADER_FILENAME}) to build directory..."
BYPRODUCTS "${SHADER_OUTPUT_FILENAME}"
COMMAND ${CMAKE_COMMAND} -E copy
${SHADER_SRC} # Shader file in source directory
${SHADER_OUTPUT_FILENAME} # Shader file that I need in build directory
VERBATIM
)
【问题讨论】:
-
请创建一个minimal reproducible example,即一个完整的最小
CmakeLists.txt,可用于与所需(最小)输入文件一起重现问题。