CMake переходить по символическим ссылкам во время установки

Короткий вопрос: Можно ли настроить CMake таким образом, чтобы он следовал символическим ссылкам при копировании файлов во время установки, и если да, то как это делается?

Подробности: Я использую CMake для сборки и установки LLVM. В моем исходном дереве LLVM в каталоге include у меня есть символическая ссылка на другой подпроект, который разрабатывается для LLVM. Кажется, все работает, за исключением того, что я заметил, что когда я запускал «cmake install», он копировал каталог include, не следуя символическим ссылкам. У меня проблема в том, что у моих символических ссылок есть относительный путь (потому что он находится внутри репозитория git). Поэтому, когда символические ссылки копируются (вместо того, чтобы следовать и копировать содержимое), они больше не указывают на правильные файлы. Например, у меня есть 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 .
  )

список каталогов для каталога include:

dsa -> ../../llvm-poolalloc/include/dsa/
llvm
llvm-c
poolalloc -> ../../llvm-poolalloc/include/poolalloc

Я хочу dsa и poolalloc , которые нужно скопировать, а не просто копировать символические ссылки. Причина, по которой я не использую абсолютные пути в символических ссылках, заключается в том, что я зарегистрировал их в репозитории git. Таким образом, мой абсолютный путь будет отличаться от того, что кто-то другой работает над проектом, когда они производят оформление заказа из репо.

5
задан Gabriel Southern 14 February 2012 в 21:35
поделиться