【发布时间】:2015-10-12 05:18:04
【问题描述】:
我尝试在 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
我收到以下警告:
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 handling article,但我仍然无法区分这些路径变量及其在 OS X 上的正确使用。
【问题讨论】:
-
我们的 CMakeLists.txt 是在仅在 Linux 上开发时创建的。也许另一个选项会导致警告。我不确定。
-
不要使用 RPATH 的。它们将导致生成的二进制文件无法通过安全审核。相反,请使用
-install_name和install_name_tool。
标签: macos build makefile cmake shared-libraries