OS X / Clang不会使用c ++ 11标头

时间:2015-09-16 17:22:00

标签: c++ macos c++11 cmake clang

系统信息:OS X 10.10.5,Clang = Apple LLVM版本6.1.0(clang-602.0.53)(基于LLVM 3.6.0svn),cmake = 2.8.12.2

假设我有一些简单的文件,main.cpp:

#include <stdio.h>

#include <vector>

#include <algorithm>

int main(void)
{
    std::vector<int> v{1, 2, 3, 4};

    int sum = std::accumulate(v.begin(), v.end(), 0);

    printf("Sum = %d\n", sum);
    return 0;
 }

当我跑&#34; clang ++ -stdlib = libc ++ -std = c ++ 11 main.cpp&#34;我收到错误:

  

main.cpp:11:20:错误:没有名为&#39;积累&#39;在命名空间&#39; std&#39;      int sum = std :: accumulate(v.begin(),v.end(),0);

当我看,使用IDE(Qt Creator)时,我看到包含的标题是/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm

当我查看我的文件系统时,我发现/usr/include/c++/4.2.1存在符合c ++ 11标准的文件。

接下来,我使用cmake来控制更大的构建(上面只是一个示例设置)。

所以这里是上面例子的令牌CMakeLists.txt文件:

project(c11Test)
cmake_minimum_required(VERSION 2.8)

set(CMAKE_VERBOSE_MAKEFILE ON)

set(CMAKE_CXX_FLAGS "-stdlib=libc++ -std=gnu++11")

add_executable(${PROJECT_NAME} main.cpp)

当我构建时,创建此输出(摘录):

  

[100%]构建CXX对象CMakeFiles / c11Test.dir / main.cpp.o   / usr / bin / c ++ -stdlib = libc ++ -std = gnu ++ 11 -o   CMakeFiles / c11Test.dir / main.cpp.o -c /Users/username/c11Test/main.cpp   /Users/username/c11Test/main.cpp:11:20:错误:没有成员命名   &#39;累积&#39;在命名空间&#39; std&#39;       int sum = std :: accumulate(v.begin(),v.end(),0);                 ~~~~~ ^ 1生成错误。

whole output here):

我知道this post,这似乎意味着我需要做的只是包含这些编译器标志。但这似乎不起作用。

此外,我可能需要在不同版本的各种OS X计算机上构建它,所以我真的不知道是否有一个我忽略的通用解决方案?

1 个答案:

答案 0 :(得分:15)

另一位朋友提供了答案:

在我更大的节目中(不在这里发布,obv。)某些东西以某种隐藏的方式包含<numeric>。当我在OSX上编译时,它不再包括在内。我原以为<algorithm>是必要的组成部分,但显然不是。所以只是我的错误。