CMake外部项目符号链接

时间:2017-06-07 22:10:24

标签: cmake

我正在构建一个使用符号链接生成共享对象的外部项目:

libxml.so -> libxml.so.0.0.0
libxml.so.0 -> libxml.so.0.0.0
libxml.so.0.0.0

我想将这3个文件复制到我的库输出路径。但是,如果我这样做:

ExternalProject_Add_Step(
    xml copy2lib
    COMMAND ${CMAKE_COMMAND} -E copy_directory ${EXTERNAL_INSTALL_PATH}/xml/lib/ ${LIBRARY_OUTPUT_PATH}
    DEPENDEES install
)

所有符号链接都被销毁,基本上有3个库副本。我知道以下解决方案,即:

COMMAND ${CMAKE_COMMAND} -E create_symlink ./libxml.so.0.0.0 ./libxml.so
WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH}

但是,在我的情况下,外部项目正在生成遵循此约定的数十个库。请告诉我,我不必手动修复每个符号链接?

1 个答案:

答案 0 :(得分:1)

CMake对文件链接(符号链接,硬链接等)的支持不足。部分地,这是因为没有跨平台视图这样的事情:Windows和Linux对这些术语有不同的解释。

因此,当您希望以特定方式使用Linux符号链接时,请使用特定于Linux的命令。而不是跨平台cmake -E copy_directory使用特定于Linux的cp

COMMAND cp -Pr ${EXTERNAL_INSTALL_PATH}/xml/lib/ ${LIBRARY_OUTPUT_PATH}

请注意,复制符号链接仅适用于相对符号链接。如果符号链接包含绝对路径,则复制后它将引用原始库位置,而不是复制的位置。