#
# export file: copy it to the build tree on every build invocation and add rule for installation
#
function (cm_export_file FILE DEST)
if (NOT TARGET export-files)
add_custom_target(export-files ALL COMMENT "Exporting files into build tree")
endif (NOT TARGET export-files)
get_filename_component(FILENAME "${FILE}" NAME)
add_custom_command(TARGET export-files COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${FILE}" "${CMAKE_CURRENT_BINARY_DIR}/${DEST}/${FILENAME}")
install(FILES "${FILE}" DESTINATION "${DEST}")
endfunction (cm_export_file)
7条答案
按热度按时间y0u0uwnf1#
自2.8版起,
file
命令有一个COPY
子命令:请注意:
相对输入路径是相对于当前源目录计算的,相对目标是相对于当前生成目录计算的
toiithl62#
对于CMake 2.8或更高版本,请使用
file(COPY ...)
命令。对于CMake 2.8以下的版本,以下宏将文件从一个目录复制到另一个目录。如果您不想替换复制文件中的变量,请更改configure_file
@ONLY
参数(例如,更改为COPYONLY
)。r7knjye23#
由于没有人提到
cmake -E copy_directory
作为自定义目标,下面是我使用的目标:vd2z7a6w4#
configure
命令只会在cmake
运行时复制文件。另一个选择是创建一个新的目标,并使用custom_command选项。下面是我使用的一个命令(如果您多次运行它,则必须修改add_custom_target
行,使其对每个调用都是唯一的)。ubof19bj5#
使用execute_process并调用cmake -E。如果需要深层拷贝,可以使用
copy_directory
命令。更好的是,可以使用create_symlink命令创建symlink
(如果您的平台支持它)。后者可以如下所示:发件人:http://www.cmake.org/pipermail/cmake/2009-March/028299.html
piwo6bdm6#
谢谢!使用add_custom_target和add_custom_command的建议真的很有帮助。我写了下面的函数,在我的项目中的任何地方都可以使用。它也指定了安装规则。我主要用它来导出接口头文件。
用法如下所示:
bvjxkvbb7#
基于赛斯·Json的回答;为了更方便起见,我写道: