24

我按照此处clang的说明从头开始安装。之后,我按照此处的说明安装使用。libc++libsupc++

clang现在,每当我用and编译和链接程序时libc++,我都需要发出这样的命令:

clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib <...>

有没有办法以默认使用的方式配置/编译clang libc++,而无需我每次都在命令行上指定库和/或路径?将其放入LD_LIBRARY_PATH也不是首选选项,使用自定义包装脚本也不是。

4

2 回答 2

13

Clang 的 CMake 构建系统学会了CLANG_DEFAULT_CXX_STDLIB设置默认的 C++ 标准库。

但是,我不知道这个解决方案对你有多实用,因为在下一个 clang/llvm 版本之前你必须使用树顶构建。

于 2016-02-18T02:02:44.703 回答
1

我可以想到三种方法来做到这一点。第一个适用于使用 Unix makefile 的单个项目,第二个将提供任意数量的项目,但需要编辑任意数量的文件以服务任意数量的用户,第三个适用于任意数量的项目或用户. 您可能想跳到第三个选项,但其余选项可供其他有类似需求的人使用。

  1. 一个很好的方法是使用makefile。这将使您能够通过简单地键入来构建您的项目make。如果您使用 *nix,则不需要安装,大多数系统都带有它。这是一个示例生成文件,可以满足您的要求(只需替换<progname>为您的程序名称和<filename>源文件名)。只需将其粘贴到与源文件相同的目录中名为“makefile”的文件中。

    FLAGS=-stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib
    
    all: <progname>
    
    progname: 
        clang++ $FLAGS progname
    

    免责声明:我不使用 clang++,所以这可能是一个不完整的调用。例如,在 gcc 中,您还需要指定-o outfile_name

  2. 或者(因为我刚刚阅读了评论),您可以运行以下命令(假设您使用 bash):

    echo 'alias stdclang="clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib"' >> ~/.bashrc
    

    从那时起,您只需键入即可使用链接的 libc++ 库进行构建stdclang <progname>

  3. 我能想到的最后一件事与上一件事相似,但有一个更永久的转折。以 root 身份运行以下命令:touch /usr/bin/stdclang && chmod a+x /usr/bin/stdclang 然后使用所需/usr/bin/stdclang的任何编辑器编辑文件并添加以下行:

    #!/bin/bash
    clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib $@
    

    然后你可以运行stdclang <other_args>让它自动扩展为clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib <other_args>

于 2016-02-09T00:46:38.310 回答