【问题标题】:OSX 10.10 CMake 3.0.2 and clang won't find local headersOSX 10.10 CMake 3.0.2 和 clang 找不到本地标头
【发布时间】:2014-11-09 23:26:34
【问题描述】:

在 OSX 10.9 上,我安装了各种头文件库

/usr/include
/usr/local/include

一切正常。 今天我对优胜美地进行了“免费升级”,突然一切都停止了。 与 Yosemite 一起,我还(之前)升级了 Xcode(注意,我不是使用 Xcode 编译,而是直接通过命令行进行编译)。

我有一个明确包含 /usr/include 的 CMakeLists.txt

set(INCLUDE_HEADERS ${INCLUDE_HEADERS}
             /usr/include
             /usr/local/include)
include_directories(SYSTEM ${INCLUDE_HEADERS})

然而,当我尝试编译时,我立即得到:

fatal error: 'boost/lexical_cast.hpp' file not found
#include <boost/lexical_cast.hpp>

这里发生了什么?其他人经历过这个,甚至知道如何解决它? 在 10.9 中一切正常(哦,我为什么要升级?) 我也可能做错了什么,因为我注意到 cmake 已升级到 3.0.2

【问题讨论】:

    标签: c++ macos cmake clang


    【解决方案1】:

    我找到了问题和解决方案。 问题是默认情况下,clang 似乎只在平台的 SDK 文件夹中搜索:

    -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk
    

    这在以前没有发生过,或者我在不知不觉中改变了。 所以,我在我的主目录中更改了我的.bash_profile,并添加了:

    export C_INCLUDE_PATH=/usr/include:/usr/local/include
    export CPLUS_INCLUDE_PATH=/usr/include:/usr/local/include
    

    关闭并重新打开一个新终端,现在 clang 找到了包含目录,并且工作正常。 虽然我对只有后者(/usr/local/include)似乎与 -I 标志一起使用这一事实感到困扰。

    【讨论】:

      【解决方案2】:

      这种情况的规范方法是:

      find_package(boost REQUIRED)
      if(Boost_FOUND)
          include_directories(${boost_INCLUDE_DIRS})
      endif()
      

      它将BOOST头的路径添加到编译器搜索路径中。

      【讨论】:

      • 如果您将包标记为“REQUIRED”,使用if(...) 语句的原因是什么?
      猜你喜欢
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 2015-03-10
      • 2015-11-10
      • 2012-01-13
      • 1970-01-01
      相关资源
      最近更新 更多