tutorial target_link_libraries macos build makefile cmake shared-libraries

target_link_libraries - CMake advertencias bajo OS X: MACOSX_RPATH no se especifica para los siguientes objetivos



cmake tutorial (2)

Intento construir un software basado en CMake bajo OS X (Yosemite) que puede construirse exitosamente bajo Fedora 21. Utiliza un montón de bibliotecas. Ambos, grandes abiertos como Boost y algunos de auto-escritura que se encuentran en / installation_folder / lib. Yo uso la versión 3.3.0 de CMake.

Despues de ejecutar

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

Recibo las siguientes advertencias:

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.

El CMakeLists.txt contiene las siguientes líneas con respecto a 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")

Todo lo que puedo decir es que ${CMAKE_INSTALL_PREFIX}/lib es de hecho la ruta correcta, y que otras bibliotecas como Boost se encuentran correctamente.

Ignorar las advertencias y continuar con "make" en el directorio de compilación da como resultado un error de enlace.

Leí el artículo de manejo de CMake Wiki RPATH , pero todavía no puedo distinguir entre estas variables de ruta y su uso correcto en OS X.


Agregar un set(CMAKE_MACOSX_RPATH 1) en CMakeLists.txt, antes de las declaraciones escritas anteriores, permite que desaparezcan las advertencias. El problema de enlace después de ejecutar make permanece. Esto me lleva a suponer que mi configuración de RPATH no tiene nada que ver con mi problema de vinculación.

Sin embargo, el problema de este hilo está resuelto. ¡Una explicación sobre el uso correcto de las opciones de RPATH dentro de CMakeLists.txt es muy bienvenida!


Bueno, solo voy a dar un paso adelante de la respuesta de @ fotinsky. (Siéntase libre de incorporar esto en su respuesta).

El resultado de la sugerencia de la advertencia de ejecutar cmake-policy --help-policy CMP0042 es:

CMake 2.8.12 and newer has support for using ``@rpath`` in a target''s 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''s 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.

Esto simplemente significa que en versiones posteriores de CMake, el usuario debe habilitar o deshabilitar explícitamente CMAKE_MACOSX_RPATH .

También hay más información de fondo sobre la introducción de esta variable en esta entrada de blog de CMake .