OSX 10.10 CMake 3.0.2 和 clang 找不到本地标头

OSX 10.10 CMake 3.0.2 and clang won't find local headers

本文关键字:找不到 clang CMake OSX      更新时间:2023-10-16

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

/usr/include
/usr/local/include

一切都很顺利。今天我对约塞米蒂进行了"免费升级",突然一切都停止了。我和Yosemite一起(以前)升级了Xcode(注意,我不是用Xcode编译的,而是直接通过命令行clang)。

我有一个CMakeLists.txt,它清楚地包括/usr/include

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

我找到了问题和解决方案。问题是,默认情况下,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找到了include dirs,工作正常。尽管我感到困扰的是,似乎只有后者(/usr/local/include)与-I标志一起使用。

这种情况的典型方法是:

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

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

相关文章: