我正在尝试提供一些带有一些可执行文件的“源”文件。我想知道是否有办法将这些源文件复制到构建目录(从源目录),然后使用 CMake 复制到安装目录。
我更具体的目标是包含我在他们自己的 *.cl 文件中编写的 OpenCL 内核。
例子:
mkdir build
cd build
cmake ..
make
现在我的目录应该有一个可执行文件(标准 CMake)并且some_opencl_kernel.cl
我在我的可执行文件中打开它。
add_custom_command
您可以通过添加以下内容将文件复制到构建树:
add_custom_command(TARGET MyExe POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/src/some_opencl_kernel.cl
$<TARGET_FILE_DIR:MyExe>
)
这会将构建后事件添加到您的目标(我称之为它MyExe
),它将文件复制src/some_opencl_kernel.cl
到构建树中与可执行文件相同的目录中。
将文件复制到构建树中有多种其他方法,但我喜欢这种方法,因为它使用“生成器表达式”$<TARGET_FILE_DIR:MyExe>
来标识可执行文件目录在构建树中的位置。这可能因构建类型或平台而异,因此生成器表达式是我认为指定此位置的最可靠、跨平台的方式。
至于安装,你可以使用install(FILES ...)
命令。假设您的可执行文件具有以下内容:
install(TARGETS MyExe RUNTIME DESTINATION bin)
你可以添加:
install(FILES src/some_opencl_kernel.cl DESTINATION bin)
这会将其安装到${CMAKE_INSTALL_PREFIX}/bin/some_opencl_kernel.cl
可执行文件旁边。
如果要复制包含某种类型文件的文件夹树:
# Copy all assets to resources file
INSTALL(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/assets/ DESTINATION ${INSTALL_PATH}/assets
FILES_MATCHING PATTERN "*.dae" PATTERN "*.jpg")
如果要复制文件夹中的所有文件,只需删除 FILES_MATCHING 模式。