MacPorts clang 不使用它自己的 headers

MacPorts clang not using its own headers

我正在尝试让 emscripten 在 OS X 10.8 上工作,请参阅 this post 以了解那里的一些相关问题。显然 Xcode 附带的 clang++ 版本太旧了,所以我使用 MacPorts 得到了最近的 clang 3.7.0。我什至告诉 CMake 使用那个编译器(在命令行上传递 -DCMAKE_CXX_COMPILER=clang++-mp-3.7),但它仍然失败:

[ 33%] Building CXX object CMakeFiles/optimizer.dir/parser.cpp.o
/opt/local/bin/clang++-mp-3.7    -std=c++11 -fno-exceptions -fno-rtti -O3 -DNDEBUG
  -o CMakeFiles/optimizer.dir/parser.cpp.o
  -c …/emsdk/emscripten/master/tools/optimizer/parser.cpp
In file included from …/emsdk/emscripten/master/tools/optimizer/parser.cpp:2:
In file included from …/emsdk/emscripten/master/tools/optimizer/parser.h:12:
…/emsdk/emscripten/master/tools/optimizer/istring.h:3:10: fatal error: 
      'unordered_set' file not found
#include <unordered_set>
         ^
1 error generated.

我可以通过从命令行启动编译器来重现该问题。在并行构建模式下,有时它会抱怨 <cstdint> 而不是 optimizer.cpp。这两个 headers 都存在于 /opt/local/libexec/llvm-3.7/include/c++/v1/.

我已经通过将 CXXFLAGS=--stdlib=libc++ 添加到环境中解决了最初的问题。那么即使是系统版本的 clang 也会做我需要的一切。该标志对 MacPorts 版本的 clang 也有神奇的作用:指定我获得了成功的构建,我什至可以验证(使用 -E 编译器开关)它正在使用 headers我之前提到过。不过,我仍然不确定是否有任何东西可以确保 headers 与系统的 libc++ 版本相匹配。