首页 > 解决方案 > 为什么 CMAKE 在被问到时不总是复制资源?

问题描述

我有一个项目,其中包含一些资产(着色器)文件,这些文件也经常更新,每次构建项目时都需要将其复制到构建目标文件夹。

现在,文件是第一次复制的,但是,当项目被重建(从 Clion 中)时,文件不会继续复制。例如,如果我从它们复制到的目录中删除它们,它们就不会再次出现。

这是我的 Cmake 文件:

# Name for this project
set(PROJECT_NAME "3d_model")

# Choose the library for the final build
set(PROJECT_BUILD_DIR ${CMAKE_SOURCE_DIR}/bin/${PROJECT_NAME})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BUILD_DIR}/$<CONFIG>)

# Set sources
set(PROJECTS_SOURCE_DIR ${CMAKE_SOURCE_DIR}/src/projects)
set(SOURCES
  src/main.cpp
  ${INCLUDE_DIR}/glad/src/glad.c)

add_executable(${PROJECT_NAME} ${SOURCES})
target_link_libraries(${PROJECT_NAME} ${CMAKE_DL_LIBS} glfw ${GLFW_LIBRARIES})

# Copy resources
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/assets DESTINATION ${PROJECT_BUILD_DIR}/)

您可以在最后一行中看到我尝试在每次构建项目时复制项目资产。

有没有办法确保这种情况发生?

标签: c++cmake

解决方案


add_custom_command可能是你想要的

add_custom_command(TARGET ${ProjectName} PRE_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/assets ${PROJECT_BUILD_DIR}/
 )

推荐阅读