OS X下的CMake警告:未为以下目标指定MACOSX_RPATH

OS X下的CMake警告:未为以下目标指定MACOSX_RPATH,macos,build,makefile,cmake,shared-libraries,Macos,Build,Makefile,Cmake,Shared Libraries,我尝试在OS X(约塞米蒂)下构建一个基于CMake的软件,它可以在Fedora 21下成功构建。它使用了大量的库。它们都是开放式的,比如Boost,还有一些是在/installation\u 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/loc

我尝试在OS X(约塞米蒂)下构建一个基于CMake的软件,它可以在Fedora 21下成功构建。它使用了大量的库。它们都是开放式的,比如Boost,还有一些是在/installation\u 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\u INSTALL\u PREFIX}/lib
确实是正确的路径,而且其他库(如Boost)也能正确找到

忽略警告并在生成目录中继续“make”将导致链接错误

我阅读了,但我仍然无法区分这些路径变量及其在OS X上的正确使用。

在上述书面声明之前,将
set(CMAKE\u MACOSX\u RPATH 1)
添加到CMakeLists.txt中,让警告消失。执行
make
后的链接问题仍然存在。这使我认为我的RPATH设置与我的链接问题无关


尽管如此,该线程的问题还是解决了。关于CMakeLists.txt中正确使用RPATH选项的说明仍然非常受欢迎

好吧,我将从@fotinsky的答案向前走一步。(请随意将此纳入您的答案中。)

警告建议运行cmake策略--帮助策略CMP0042的输出为:

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.
这仅仅意味着在以后的cmake版本中,用户需要显式启用或禁用cmake_MACOSX_RPATH

本节还提供了有关引入此变量的更多背景信息。

如中所述,如果您不需要针对较旧版本的cmake,只需设置:

cmake_minimum_required (VERSION 3.0)

这消除了主要版本之间默认值的模糊性,只是默认启用。

您解决过链接问题吗?我也有同样的麻烦是的,我解决了。上述RPATH变量与链接问题无关。有必要在CMakeLists.txt中添加更多库,CMake可以在Linux下自动找到这些库,但不能在OS X下找到。更新:如hopia所述,显式禁用(!)RPATH也可以解决此问题。我必须试一试。或者您可以设置所需的
cmake\u最小值(3.0版)
我们的CMakeLists.txt是在Linux上开发时创建的。可能是另一个选项导致了警告。我不确定。不要使用RPATH。它们将导致生成的二进制文件无法通过安全审核。相反,使用
-install\u name
install\u name\u工具
。非常有趣。CMAKE_INSTALL_NAME_DIR确实在我们的CMakeLists.txt中使用。通过不设置RPATH或启用RPATH,安装名称变量可能会被忽略。我将尝试显式禁用RPATH。