CMake:符号链接文件而不是在安装期间复制它们

CMake: Symlink files instead of copying them during install

make install 期间制作 CMake 复制文件很简单:

install(TARGETS foo DESTINATION lib)
install(DIRECTORY Include/ DESTINATION include)

但是是否可以编写 make symlink 来创建符号链接而不是复制文件?如果是,怎么做?

编写创建所需符号链接的 CMake 脚本:

symlink_include_dir.cmake.in:

execute_process(COMMAND cmake -E create_symlink
    "@CMAKE_SOURCE_DIR@/include" # Old name
    "@CMAKE_INSTALL_PREFIX@/include" # New name
)

CMakeLists.txt 中配置此脚本以针对实际源和安装路径进行调整,并从 install(SCRIPT):

调用它

CMakeLists.txt:

# This will copy original script with @variable@ replaced with variable's value.
configure_file("symlink_include_dir.cmake.in" "symlink_include_dir.cmake"
   @ONLY)

# Tell CMake to use the script at install stage
install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/symlink_include_dir.cmake")

好的,在阅读了建议的答案并进行了几次尝试后,我设法编写了代码:

add_custom_target(symlink
    ${CMAKE_COMMAND} -E create_symlink ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/libfoo.a ${CMAKE_INSTALL_PREFIX}/lib/libfoo.a
    COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_SOURCE_DIR}/Include ${CMAKE_INSTALL_PREFIX}/include)