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

fot*_*sky 21 macos makefile build cmake shared-libraries

我尝试在OS X(Yosemite)下构建一个基于CMake的软件,它可以在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 
Run Code Online (Sandbox Code Playgroud)

我收到以下警告:

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.
Run Code Online (Sandbox Code Playgroud)

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")
Run Code Online (Sandbox Code Playgroud)

我只能说这${CMAKE_INSTALL_PREFIX}/lib确实是正确的路径,并且正确找到了像Boost这样的其他库.

忽略警告并继续在构建目录中使用"make"会导致链接错误.

我阅读了CMake Wiki RPATH处理文章,但我仍然无法区分这些路径变量及其在OS X上的正确使用.

fot*_*sky 26

set(CMAKE_MACOSX_RPATH 1)在上述书面语句之前添加到CMakeLists.txt中,可以使警告消失.执行后的链接问题make停留.这让我想到我的RPATH设置与我的链接问题无关.

然而,这个线程的问题已经解决了.关于在CMakeLists.txt中正确使用RPATH选项的解释仍然非常受欢迎!

  • 或者你可以设置`cmake_minimum_required(VERSION 3.0)` (10认同)
  • 你有没有解决链接问题?我遇到了同样的麻烦 (4认同)