Ubuntu 如何在CMake中设置STL实现?

Ubuntu 如何在CMake中设置STL实现?,ubuntu,cmake,clang,libc++,Ubuntu,Cmake,Clang,Libc++,我对尝试clang感兴趣,因为它具有静态分析功能。我目前正在开发一个C++项目,运行在Ubuntu 11.04上。clang的一个问题是它不能与libstdc++4.4一起工作。我不想把libstdc++源代码搞得一团糟,因为这可能是对clang的一次临时尝试 另一种方法是使用libc++而不是libstdc++。不幸的是,我还没有找到使用CMake替代STL实现的在线帮助 我应该在我的CMakeLists.txt文件中写些什么来告诉CMake使用libc++?一般来说,您必须从包含路径中删除s

我对尝试clang感兴趣,因为它具有静态分析功能。我目前正在开发一个C++项目,运行在Ubuntu 11.04上。clang的一个问题是它不能与libstdc++4.4一起工作。我不想把libstdc++源代码搞得一团糟,因为这可能是对clang的一次临时尝试

另一种方法是使用libc++而不是libstdc++。不幸的是,我还没有找到使用CMake替代STL实现的在线帮助


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

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

你安装了libc++吗? 据报道,libcxx目前在linux上不受正式支持

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

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

叮当的页面是一个很好的资源

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
然后,该二进制文件驻留在
${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

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

你安装了libc++吗? 据报道,libcxx目前在linux上不受正式支持

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

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

叮当的页面是一个很好的资源

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
然后,该二进制文件驻留在
${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

哎呀,;我曾经假设libc++可以用于linux,因为我看到了一个家伙的博客帖子,他让它工作了()。但是,如果作者没有正式支持,我不确定我是否愿意再进行转换。谢谢你的提醒@超级电气啊,谢谢你的链接。看起来我很感兴趣,但是在linux发行版中运行自己的libc可能会非常痛苦。@SuperElectric我刚刚更新了我的答案,因为您很可能不需要修改的libc++Whoops;我曾经假设libc++可以用于linux,因为我看到了一个家伙的博客帖子,他让它工作了()。但是,如果作者没有正式支持,我不确定我是否愿意再进行转换。谢谢你的提醒@超级电气啊,谢谢你的链接。看起来我很感兴趣,但是在linux发行版中运行自己的libc可能非常痛苦。@SuperElectric我刚刚更新了我的答案,因为您很可能不需要修改的libc++