CMake在安装过程中遵循符号链接

Gab*_*ern 5 cmake llvm

简短的问题: 在安装过程中复制文件时,是否可以将CMake设置为遵循符号链接?

详细信息:我正在使用CMake构建和安装LLVM。在我的LLVM源代码树的include目录中,我有一个指向另一个针对LLVM开发的子项目的符号链接。一切似乎都正常,除了我注意到当我运行“ cmake install”时它复制了include目录而不遵循符号链接。我的问题是我的符号链接具有相对路径(因为它位于git repo中)。因此,当符号链接被复制(而不是跟随并复制内容)时,它们不再指向正确的文件。例如,我要dsa -> ../../llvm-poolalloc/include/dsa/ 在安装时复制此链接的内容,而不是仅复制链接。但是我还没有找到执行此操作的cmake标志。

我意识到这可能不是构建项目的想法,但是我正在使用已经存在的东西,最好不要更改太多目录结构,因为与我一起工作的其他人都希望这样做这样。因此,我认为能够遵循符号链接也许可以解决我的问题,而不必重新构建整个构建系统。但是我愿意接受其他建议,以寻求更好的方法来完成我想做的事情。

请注意,我正在Linux(Ubuntu 10.04)上使用LLVM 2.6(我从llvm-gcc一起从源代码进行编译)。另外,我正在使用CMake 2.8版。

编辑:

这是与安装指令相关联的CMakeLists.txt文件的源代码:

install(DIRECTORY include
  DESTINATION .
  PATTERN ".svn" EXCLUDE
  PATTERN "*.cmake" EXCLUDE
  PATTERN "*.in" EXCLUDE
  PATTERN "*.tmp" EXCLUDE
  )

install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include
  DESTINATION .
  )
Run Code Online (Sandbox Code Playgroud)

包含目录的目录列表为:

dsa -> ../../llvm-poolalloc/include/dsa/
llvm
llvm-c
poolalloc -> ../../llvm-poolalloc/include/poolalloc
Run Code Online (Sandbox Code Playgroud)

我想要的是dsapoolalloc复制目录,而不仅仅是复制符号链接。我在符号链接中不使用绝对路径的原因是我将它们检入了git repo。因此,我的绝对路径与在项目中进行回购的其他人有所不同。

arr*_*owd 4

嗯,让我们试试这个:

get_filename_component(ABS_DIR include REALPATH)

install(DIRECTORY ${ABS_DIR}
  DESTINATION .
  PATTERN ".svn" EXCLUDE
  PATTERN "*.cmake" EXCLUDE
  PATTERN "*.in" EXCLUDE
  PATTERN "*.tmp" EXCLUDE
  )
Run Code Online (Sandbox Code Playgroud)

如果没有帮助,您可以尝试不安装包含目录本身(这是符号链接),而是安装它的内容。但在你的情况下,你需要想出智能正则表达式:

file(GLOB INCLUDES include/*) # filter there .svn and others

install(FILES ${INCLUDES}
  DESTINATION include
)
Run Code Online (Sandbox Code Playgroud)

最后,使符号链接成为绝对的。