我正在尝试用C++编写一个练习游戏.我正在使用CMake,我的项目由IDE自动构建在一个单独的构建目录中.但是,我的assets文件夹没有被复制到新目录.
目前,我正试图通过以下方式解决此问题:
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND cp -r ${PROJECT_SOURCE_DIR}/assets ${CMAKE_BINARY_DIR}
)
Run Code Online (Sandbox Code Playgroud)
但是,这似乎对结果没有任何影响,我的构建目录中仍然没有 assets 目录.
我怎样才能将此资产目录复制到我的构建位置?有没有更聪明的方法将我的程序指向我的资产位置(也许还可以使用/ usr/share中的资产?)
tda*_*roy 18
我发现了两种方法,既确保它在目标构建上复制并保持最新,即使目标不需要重新构建。
第一个使用 CMake 命令行工具copy_directory。从文档中不清楚此复制是否总是发生,无论目录中的文件assets是否更新,或者是否仅在资产文件不存在或资产文件更新时进行复制:
add_custom_target(copy_assets
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/assets ${CMAKE_CURRENT_BINARY_DIR}/assets
)
add_dependencies(mytarget copy_assets)
Run Code Online (Sandbox Code Playgroud)
第二个需要一个小的附加 CMake 脚本文件,但它允许我们使用file(COPY ...)CMake comamnd,该命令在文档中指出“复制会保留输入文件时间戳,并优化文件(如果文件存在于具有相同时间戳的目标处)”。
copy-assets.cmake首先,在与您的目录相同的目录中创建 CMake 脚本文件CMakeLists.txt,其内容为(类似于 Ethan McTague 的答案)
file(COPY ${CMAKE_CURRENT_LIST_DIR}/assets DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
Run Code Online (Sandbox Code Playgroud)
然后在您的 中CMakeLists.txt添加以下内容:
add_custom_target(copy_assets
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_LIST_DIR}/copy-assets.cmake
)
add_dependencies(mytarget copy_assets)
Run Code Online (Sandbox Code Playgroud)
经过一段时间的搜索,我设法找到了file(COPY {files} DESTINATION {directory})命令:
file(COPY assets DESTINATION ${CMAKE_BINARY_DIR})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2523 次 |
| 最近记录: |