#cmake
#cmake
Вопрос:
Есть эта вики-страница об обработке RPATH в CMake:https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/RPATH-handling#always-full-rpath
Они говорят, что вы должны добавлять каталог в RPATH только в том случае, если это не системный каталог. Это имеет смысл, поэтому мне было интересно, почему они в любом случае устанавливают CMAKE_INSTALL_RPATH . Я что-то пропустил, или это просто ошибочный фрагмент кода?
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
...
LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
IF("${isSystemDir}" STREQUAL "-1")
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
ENDIF("${isSystemDir}" STREQUAL "-1")
Комментарии:
1. «почему они предлагают установить CMAKE_INSTALL_RPATH в любом случае». — Не удается найти «в любом случае» на странице, на которую дана ссылка. Раздел
Always full RPATH
начинается со слов » Во многих случаях вам захочется убедиться, что требуемые библиотеки всегда находятся независимо от LD_LIBRARY_PATH и места установки». В этой фразе нет цветов «обязательно» или «делать всегда».2. под «предложить» я имел в виду, что они всегда устанавливают переменную CMAKE_INSTALL_RPATH. Позже будет дополнительная проверка с помощью «LIST(FIND …», но на тот момент переменная уже установлена.
3. Комментарий
# the RPATH to be used when installing, but only if it's not a system directory
подразумевает, что вместо безусловной настройки RPATH следует использовать последнюю часть фрагмента. Я согласен, что это не так очевидно, но в остальном последняя часть не имеет смысла. Кстати, фрагмент кажется довольно устаревшим: сравнение переменной лучше выполнять без разыменования :IF(isSystemDir STREQUAL "-1")
.