cmake on macosx maverick,如何强制/ usr / include被包含在内

时间:2013-12-10 00:03:58

标签: c++ xcode macos cmake include-path

我正在开发一个带有xcode全新更新的macosx 10.9,我已经完成了xcode-select --install。 我有一个使用标题GL / glew.h和stdio.h

的C ++文件
#include <stdio.h>
#include <GL/glew.h>

Glew安装在/ usr / include中。

$ ls /usr/include/GL
glew.h  glxew.h wglew.h

stdio.h也位于/ usr / include中,但是一个locate显示它存在于许多文件夹中,包括:

  

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk/usr/include /

如果我尝试编译代码而没有指定/ usr / local include路径,那么我得到

 fatal error: 'GL/glew.h' file not found
 #include <GL/glew.h>

请注意,stdio似乎已成功包含在内。 如果我在命令行中将-I / usr / include添加到g ++,则编译成功。

现在,我有一个添加/ usr / include的cMakeList.txt,就像那样:

 include_directories ( /usr/include/) 

但是在生成的makefile中,-I / usr / include /没有出现,编译失败就像以前一样。

我当前的解决方法是/ usr / include / named / usr / include2的符号链接,然后包含该目录。使用该配置,-I / usr / include2被添加到makefile中,一切正常。然而它很难看,我在那里遗漏了一些东西。

我的猜测是/ usr / include应该默认包含,因此cmake会跳过它,但是x-code使用不同的默认包含路径(顺便提一下stdio.h也是如此)。

有谁知道如何:

  1. 修复xcode / g ++以便它(也)默认使用/ usr / include
  2. 强制cmake字面上包含/ usr / include
  3. 我希望我已经提供了足够的信息,因为这是我的第一个问题。

2 个答案:

答案 0 :(得分:1)

我不确定,但我认为cmakexcode会改变他们的行为,现在包含的目录会自动从/usr/include/替换为/.../Xcode.app/.../SDKs/MacOSX/usr/include (它对我来说是earlier。作为一种解决方法,您可以显式添加编译器标志:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/include")

请注意,在case中,您可以使用find_package

find_package(GLEW REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${GLEW_INCLUDE_DIRS}")

答案 1 :(得分:0)

在XCode中,您应该能够将/ usr / include添加到项目中的搜索路径构建设置:

XCode Search Paths