Включить libС++/libcxx по умолчанию при использовании clang++
Я установил clang
с нуля, следуя инструкциям здесь. Впоследствии я установил libc++
с помощью libsupc++
в соответствии с инструкциями здесь.
Теперь, всякий раз, когда я компилирую и связываю программу с clang
и libc++
, мне нужно выпустить такую команду:
clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib <...>
Есть ли способ настроить/скомпилировать clang так, чтобы он использовал libc++
по умолчанию, без необходимости каждый раз указывать библиотеку и/или путь в командной строке? Вставка его в LD_LIBRARY_PATH
также не является предпочтительным вариантом, и не использует пользовательскую оболочку script.
Ответы
Ответ 1
Система сборки Clang CMake узнала CLANG_DEFAULT_CXX_STDLIB
, чтобы установить
стандартная библиотека С++ по умолчанию.
Однако я не знаю, насколько это возможно для вас, потому что вам нужно использовать вершину сборки дерева до следующего выпуска clang/llvm.
Ответ 2
Есть три способа, которые я могу придумать. Первый из них - для одного проекта с использованием файлов Unix, второй - как можно большего количества проектов, но требует редактирования произвольного количества файлов для обслуживания произвольного числа пользователей, а третий будет работать для любого количества проектов или пользователей, Вероятно, вы захотите перейти к третьему варианту, но все остальное для кого-то еще с похожими потребностями.
-
Хороший способ сделать это - использовать make файл. Это позволит вам создать свой проект, просто набрав make
. Если вы используете * nix, это не требует установки, большинство систем поставляется с ним. Вот пример файла makefile, который выполняет то, что вы запрашиваете (просто замените <progname>
на ваше имя программы и <filename>
на имя исходного файла). Просто вставьте это в файл с именем 'makefile' в том же каталоге, что и исходный файл.
FLAGS=-stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib
all: <progname>
progname:
clang++ $FLAGS progname
Отказ от ответственности: я не использую clang++, поэтому это может быть неполное обращение. В gcc вам также необходимо указать -o outfile_name
, например.
-
В качестве альтернативы (поскольку я просто прочитал комментарии), вы можете запустить следующую команду (если вы используете bash):
echo 'alias stdclang="clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib"' >> ~/.bashrc
и с этого момента вы могли бы построить библиотеку libС++, связав ее просто набрав stdclang <progname>
-
Последнее, что я мог подумать, похоже на последнее, но с более постоянным поворотом. В качестве пользователя 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 [email protected]
Затем вы можете запустить stdclang <other_args>
, чтобы он автоматически расширялся до clang++ -stdlib=libc++ -Wl,-rpath,/path/to/libcxx/lib <other_args>