我们的项目有一个CMakeList.txt
,但它不是我们的主要构建系统。在Mac OS X上,使用Cmake generates a warning(这里没有新内容):
MACOSX_RPATH is not specified for the following targets...
引用的问题/答案指出要使用set(CMAKE_MACOSX_RPATH 0)
或set(CMAKE_MACOSX_RPATH 1)
。我们的问题是the feature is too new,它打破了现有的Cmake安装,就像在Ubuntu LTS或CentOS上找到的那样。我们需要保护其用于Cmake> = 2.8.12,但blog post不讨论如何操作。
搜索没有产生有用的结果:how to guard cmake directive。我无法找到相关结果可能是由于我对Cmake缺乏经验(其他人应该保留它)。
我们如何保护set(CMAKE_MACOSX_RPATH 0)
或set(CMAKE_MACOSX_RPATH 1)
?
请注意,我不正在寻找cmake_minimum_required(VERSION 2.8.5 FATAL_ERROR)
。我能说的最好的事情并不是一件可恶的事。从测试中我们知道它不会拒绝target_include_directories
,即使target_include_directories
不满足最低要求并导致Ubuntu LTS等下层客户端出现故障。
我认为我正在寻找的更接近C预处理器宏:
#define 2_8_12 ...
#if CMAKE_VERSION >= 2_8_12
set(CMAKE_MACOSX_RPATH 0)
#endif
答案 0 :(得分:2)
if (CMAKE_VERSION VERSION_LESS 2.8.12)
message("Not setting RPATH")
else()
set(CMAKE_MACOSX_RPATH 0)
endif()
2.8.10的文档:https://cmake.org/cmake/help/v2.8.10/cmake.html#variable:CMAKE_VERSION
答案 1 :(得分:1)
或者,如果您只是想克服警告,您可以检查生成此警告的策略是否存在 :
if(POLICY CMP0042)
set(CMAKE_MACOSX_RPATH 0)
endif()
这" if"表格在documentation中描述。
答案 2 :(得分:0)
为什么不为CMake正确处理它?有一个名为CMake RPATH handling的维基页面。根据你可以添加这样的东西:
string (TOLOWER ${CMAKE_SYSTEM_NAME} TARGET_OS)
if (TARGET_OS STREQUAL darwin)
set (CMAKE_MACOSX_RPATH TRUE)
set (CMAKE_SKIP_BUILD_RPATH FALSE)
# Fix runtime paths on OS X 10.5 and less
if (CMAKE_SYSTEM_VERSION VERSION_LESS "10.0.0")
set (CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
else()
set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
endif()
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")
endif()
此代码段应使用任何2.8.x版本修复CMP0042。