Подтвердить что ты не робот

Включить libС++/libcxx по умолчанию при использовании clang++

Я установил clang с нуля, следуя инструкциям здесь. Впоследствии я установил libc++ с помощью libsupc++ в соответствии с инструкциями здесь.

Теперь, всякий раз, когда я компилирую и связываю программу с clang и libc++, мне нужно выпустить такую ​​команду:

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

Есть ли способ настроить/скомпилировать clang так, чтобы он использовал libc++ по умолчанию, без необходимости каждый раз указывать библиотеку и/или путь в командной строке? Вставка его в LD_LIBRARY_PATH также не является предпочтительным вариантом, и не использует пользовательскую оболочку script.

4b9b3361

Ответ 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>