在构建过程中,因为自己写的一些着色器需要被 图形API 调用,并且保证生成任何配置的时候依旧可用,需要在构建完成后将渲染模块的 Shaders 文件复制到可执行文件的目录下。
那么我们就需要利用 CMake 复制一整个文件夹过去
add_custom_command(
TARGET ${MODULE_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_CURRENT_SOURCE_DIR}/Shaders ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/Shaders
COMMENT "Copying Shaders.. ${CMAKE_CURRENT_SOURCE_DIR}/Shaders to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/Shaders"
)
首先添加一个自定义命令,目标填写模块的名字,修改为 POST_BUILD
,与之相对的是 PRE_BUILD
,-E
指的是调用 CMake 跨平台工具的选项,后面跟随 copy_directory。
接下来的参数分别是 原文件夹:${CMAKE_CURRENT_SOURCE_DIR}/Shaders
,目标文件夹:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/Shaders
。
最后调用 COMMENT 在执行自定义命令时输出内容。
由于每次修改都需要复制一下,所以这里选择的是构建后,如果你的文件是定死的,不需要每次修改重新引入,则可以使用:
file(COPY ${CMAKE_SOURCE_DIR}/ DESTINATION ${CMAKE_BINARY_DIR}/)
此代码是直接拷贝,但注意,此命令是在配置阶段执行的,所以说只在用 CMake 构建项目配置的时候执行一次。