我正在构建一个使用符号链接生成共享对象的外部项目:
即
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}
但是,在我的情况下,外部项目正在生成遵循此约定的数十个库。请告诉我,我不必手动修复每个符号链接?
答案 0 :(得分:1)
CMake对文件链接(符号链接,硬链接等)的支持不足。部分地,这是因为没有跨平台视图这样的事情:Windows和Linux对这些术语有不同的解释。
因此,当您希望以特定方式使用Linux符号链接时,请使用特定于Linux的命令。而不是跨平台cmake -E copy_directory
使用特定于Linux的cp
:
COMMAND cp -Pr ${EXTERNAL_INSTALL_PATH}/xml/lib/ ${LIBRARY_OUTPUT_PATH}
请注意,复制符号链接仅适用于相对符号链接。如果符号链接包含绝对路径,则复制后它将引用原始库位置,而不是复制的位置。