Подтвердить что ты не робот

Предупреждения CMake под OS X: MACOSX_RPATH не указывается для следующих целей

Я пытаюсь создать программное обеспечение на основе CMake под OS X (Yosemite), которое можно успешно создать в Fedora 21. Он использует кучу библиотек. Оба, большие открытые, такие как Boost и некоторые самозанятые, лежащие в /installation _folder/lib. Я использую CMake версии 3.3.0.

После выполнения

mkdir build
cd build
cmake .. -DCMAKE_C_COMPILER=/usr/local/Cellar/gcc/5.2.0/bin/gcc-5 -DCMAKE_CXX_COMPILER=/usr/local/Cellar/gcc/5.2.0/bin/g++-5  -DCMAKE_MODULE_PATH=${PWD}/../external/install/share/llvm/cmake 

Я получаю следующие предупреждения:

CMake Warning (dev):
Policy CMP0042 is not set: MACOSX_RPATH is enabled by default.  Run "cmake
--help-policy CMP0042" for policy details.  Use the cmake_policy command to
set the policy and suppress this warning.

MACOSX_RPATH is not specified for the following targets:

ClangWrapper
Structure
WCETXML

This warning is for project developers.  Use -Wno-dev to suppress it.

CMakeLists.txt содержит следующие строки, относящиеся к RPATH:

SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

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")

Все, что я могу сказать, это то, что ${CMAKE_INSTALL_PREFIX}/lib действительно правильный путь и что другие библиотеки, такие как Boost, найдены правильно.

Игнорирование предупреждений и продолжение "make" в каталоге сборки приводит к ошибке привязки.

Я прочитал статью обработки ссылок CMake Wiki RPATH, но я все еще не могу различить эти переменные пути и их правильное использование в OS X.

4b9b3361

Ответ 1

Добавляя set(CMAKE_MACOSX_RPATH 1) в CMakeLists.txt, перед вышеуказанными письменными заявлениями, предупреждения исчезают. Проблема связывания после выполнения make сохраняется. Это приводит меня к предположению, что моя установка RPATH не имеет ничего общего с моей проблемой связывания.

Тем не менее, эта проблема потока решена. Объяснение правильного использования параметров RPATH внутри CMakeLists.txt по-прежнему очень приветствуется!

Ответ 2

Хорошо, я просто сделаю шаг вперед от @fotinsky ответа. (Не стесняйтесь включать это в свой ответ.)

Вывод предупреждения для запуска cmake-policy --help-policy CMP0042:

CMake 2.8.12 and newer has support for using ``@rpath`` in a target install
name.  This was enabled by setting the target property
``MACOSX_RPATH``.  The ``@rpath`` in an install name is a more
flexible and powerful mechanism than ``@executable_path`` or ``@loader_path``
for locating shared libraries.

CMake 3.0 and later prefer this property to be ON by default.  Projects
wanting ``@rpath`` in a target install name may remove any setting of
the ``INSTALL_NAME_DIR`` and ``CMAKE_INSTALL_NAME_DIR``
variables.

This policy was introduced in CMake version 3.0.  CMake version
3.1.3 warns when the policy is not set and uses OLD behavior.  Use
the cmake_policy command to set it to OLD or NEW explicitly.

Это просто означает, что в более поздних версиях cmake пользователь должен явно включать или отключать CMAKE_MACOSX_RPATH.

Также есть дополнительная информация о введении этой переменной в этой записи в блоге CMake.