Короткий вопрос: Можно ли настроить 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. Таким образом, мой абсолютный путь будет отличаться от того, что кто-то другой работает над проектом, когда они производят оформление заказа из репо.