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

时间:2014-11-09 23:26:34

标签: c++ macos cmake clang

在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

2 个答案:

答案 0 :(得分:3)

我发现了问题和解决方案。 问题是默认情况下,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找到包括dirs,并且工作正常。 虽然我只是因为后者(/ usr / local / include)似乎与-I标志一起使用而感到困扰。

答案 1 :(得分:2)

这种情况的典型方式是:

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

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