我正在制作一个小程序,需要运行图像文件foo.bmp,
所以我可以编译程序但是要运行它,我必须手动将foo.bmp复制到'build'子目录
我应该在CMakeLists.txt中使用什么命令在程序编译时自动将foo.bmp添加到build子目录?
小智 15
如果这可能会有所帮助,我尝试了使用 file 命令的另一种解决方案。有选项 COPY 可以简单地将文件或目录从源复制到目标。
像这样:
FILE(COPY yourImg.png DESTINATION "${CMAKE_BINARY_DIR}")
相对路径也适用于目的地(例如,您可以简单地使用 .)
文档参考:https : //cmake.org/cmake/help/v3.0/command/file.html
Gui*_*ume 11
为此,您应该使用add_custom_command为构建目录中所需的文件生成构建规则.然后将目标的依赖项添加到这些文件中:如果目标需要,CMake只构建一些东西.
如果不是从源目录构建,还应确保仅复制文件.
像这样的东西:
project(foo)
cmake_minimum_required(VERSION 2.8)
# we don't want to copy if we're building in the source dir
if (NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
# list of files for which we add a copy rule
set(data_SHADOW yourimg.png)
foreach(item IN LISTS data_SHADOW)
message(STATUS ${item})
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${item}"
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${item}" "${CMAKE_CURRENT_BINARY_DIR}/${item}"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${item}"
)
endforeach()
endif()
# files are only copied if a target depends on them
add_custom_target(data-target ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/yourimg.png")
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我使用"ALL"自定义目标,依赖于yourimg.png文件来强制复制,但您也可以添加来自其中一个现有目标的依赖项.
| 归档时间: |
|
| 查看次数: |
13871 次 |
| 最近记录: |