【问题标题】:How can I set the STL implementation in CMake?如何在 CMake 中设置 STL 实现?
【发布时间】:2011-12-26 22:04:46
【问题描述】:

我有兴趣尝试 clang,因为它具有静态分析功能。我目前正在使用 c++ 开发一个项目,在 ubuntu 11.04 上运行。 clang 的一个问题是它不能与 libstdc++ 4.4 unless I patch it 一起使用。我不想因为可能暂时涉足 clang 的事情而弄乱 libstdc++ 源代码。

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

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

【问题讨论】:

    标签: ubuntu cmake clang libc++


    【解决方案1】:

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

    你有安装 libc++ 吗? 根据libcxx homepage,libcxx 目前还没有在 linux 上得到官方支持。

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

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

    clang的Getting Started页面是个好资源!

    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
    

    【讨论】:

    • 哎呀;我曾认为 libc++ 可用于 linux,因为看过一个人的博客文章 (solarianprogrammer.com/2011/10/16/llvm-clang-libc-linux)。但是,如果作者没有正式支持它,我不确定我是否愿意再进行转换。感谢您的提醒!
    • @SuperElectric 啊谢谢你的链接。对我来说看起来很有趣,但是在 linux 发行版中运行自己的 libc 可能会非常痛苦。
    • @SuperElectric 我刚刚更新了我的答案,因为您很可能不需要修改后的 libc++
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 2019-10-12
    相关资源
    最近更新 更多