Linux 启用libc++/默认情况下,使用clang++;
我按照说明从头开始安装了Linux 启用libc++/默认情况下,使用clang++;,linux,clang,libc++,Linux,Clang,Libc++,我按照说明从头开始安装了clang。之后,我按照说明使用libsupc++安装了libc++ 现在,每当我用clang和libc++编译并链接一个程序时,我都需要发出如下命令: clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib <...> clang++-stdlib=libc++-Wl,-rpath,/path/to/libcxx/lib 有没有一种方法可以在默认情况下使用libc++来配置/编译clang,而不必每次都
clang
。之后,我按照说明使用libsupc++
安装了libc++
现在,每当我用clang
和libc++
编译并链接一个程序时,我都需要发出如下命令:
clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib <...>
clang++-stdlib=libc++-Wl,-rpath,/path/to/libcxx/lib
有没有一种方法可以在默认情况下使用
libc++
来配置/编译clang,而不必每次都在命令行上指定库和/或路径?将它放入LD\u LIBRARY\u PATH
也不是首选选项,使用自定义包装器脚本也不是首选选项。我可以考虑三种方法来实现它。第一种是针对使用Unix makefiles的单个项目,第二种是针对任意数量的项目,但需要编辑任意数量的文件以服务任意数量的用户,第三种是针对任意数量的项目或用户。您可能想跳到第三个选项,但其他选项适用于其他有类似需求的人
make
即可构建项目。如果您使用的是*nix,则不需要安装,大多数系统都附带了它。下面是一个示例makefile,它可以满足您的请求(只需用程序名替换
,用源文件名替换
)。只需将其粘贴到与源文件位于同一目录中的名为“makefile”的文件中
FLAGS=-stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib
all: <progname>
progname:
clang++ $FLAGS progname
从那时起,只需键入stdclang
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
让它自动扩展到clang++-stdlib=libc++-Wl,-rpath,/path/to/libcxx/lib
Clang的CMake构建系统学习了
Clang\u DEFAULT\u CXX\u STDLIB
来设置
默认C++标准库.< /p>
但是,我不知道这个解决方案对您来说有多实际,因为在下一个clang/llvm版本之前,您必须使用树顶构建。clang没有配置选项?我不知道。通常libcxx是用新的clang版本构建的,因此在这种情况下,库甚至还不存在。但我会接受一个可以与预先存在的libcxx库一起使用的答案?LD_LIBRARY_PATH有什么问题?如果您不想这样做,只需将libc++安装到/usr/lib即可。我正在研究多个主机上有多个用户的网络设置,其中clang/libcxx安装在NFS共享上。为所有用户设置
LD\u LIBRARY\u PATH
是不可行的,安装到/usr/lib
是不可能的。这对Makefile来说不是一个很好的用例,在Makefile中指定Makefile内的标志以便下次只使用make命令吗?不幸的是,这不是我想要的。在您的解决方案中,您总是指定例如-stdlib
标志,即使它没有意义(例如,如果只是运行预处理器阶段)。此外,我正在寻找用户透明的解决方案,即没有包装脚本,没有更改的可执行文件名等。不幸的是,如果clang本身不提供这些配置选项,那么您所能做的就是我列出的,编辑clang源文件(我认为这是合法的?)或编写您自己的编译器。或者使用另一个支持stdlib链接的编译器,而不显式地声明它。另外,如果您只运行预处理器,您只需正常调用clang
,而不是stdclang
。我刚刚意识到它可能不完全清楚,但这不会消除您单独使用clang的能力,它实际上只是一个每个用户都可以使用的别名。最后,经过两年的等待,我可以结束这个问题@Michael Haidl,你是我的英雄:)对CLANG\u DEFAULT\u CXX\u STDLIB=libc++
感兴趣的人也可能对CLANG\u DEFAULT\u RTLIB=compiler rt
感兴趣。
#!/bin/bash
clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib $@