如何在CMake中设置STL实现?



我对clang很感兴趣,因为它具有静态分析功能。我目前正在用c++做一个项目,运行在ubuntu 11.04上。clang的一个问题是它不能与libstdc++ 4.4一起工作,除非我给它打补丁。我不想为了暂时进入clang而弄乱libstdc++源代码。

另一种选择是使用libc++而不是libstdc++。不幸的是,我无法在网上找到使用CMake替代STL实现的帮助。

我在CMakeLists.txt文件中写什么来告诉CMake使用libc++?

一般来说,你必须从你的包含路径中删除std包含,并停止clang与stdlib的链接,然后你手动包括其他库作为CMake库,然后你也添加包含路径。

你安装libc++了吗?根据libcxx的主页,libcxx目前还没有被linux正式支持。

clang与gcc广泛兼容,因此您应该能够传递clang -nostdlib -nostdinc

但是,您不一定需要构建自己的libc。您也可以从源代码(主干)构建编译器,它很可能支持libstdc++。(我刚刚在Fedora15上安装了它)。

clang的入门页是一个很好的资源!

BLD=$(pwd)/llvm
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd ../.. # back to where you started
cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
cd ../.. # back to where you started
mkdir build # for building without polluting the source dir
cd build
../llvm/configure --enable-optimize --disable-assertions --prefix /usr/local
make -j8 # adjust to the number of cores or cores times 2

clang二进制文件则驻留在${BLD}/Release/bin/中。如果你决定做一个make install,他们应该复制到/usr/local/bin/。这样你就可以向CMake传递以下参数:

cd your_source_dir_here 
mkdir build
cd build
cmake .. -DCMAKE_CXX_COMPILER=${BLD}/Release/bin/clang++ -DCMAKE_C_COMPILER=${BLD}/Release/bin/clang

最新更新