我正在制作一个小程序,需要一个名为foo.bmp的图像文件才能运行
所以我可以编译程序,但是要运行它,我必须手动将foo.bmp复制到“build”子目录中
我应该在CMakeLists.txt中使用什么命令来在程序编译时自动将foo.bmp添加到build子目录中?
我正在制作一个小程序,需要一个名为foo.bmp的图像文件才能运行
所以我可以编译程序,但是要运行它,我必须手动将foo.bmp复制到“build”子目录中
我应该在CMakeLists.txt中使用什么命令来在程序编译时自动将foo.bmp添加到build子目录中?
如果有所帮助,我尝试了另一种使用file命令的解决方案。其中有一个COPY选项可以简单地从源复制文件或目录到目标。
像这样:FILE(COPY yourImg.png DESTINATION "${CMAKE_BINARY_DIR}")
对于目标,相对路径也可以工作(例如,您可以简单地使用“.”)。
为了实现这一点,您应该使用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")
add_custom_target(data-target ALL DEPENDS ${data_SHADOW})
这样它总是依赖于所有图像。 - Guillaume