Jak skompilować C ++ z Clang?

97

Zainstalowałem Clang za pomocą apt-get w Ubuntu i mogę z powodzeniem skompilować pliki C przy jego użyciu. Jednak nie mam pojęcia, jak za jego pomocą skompilować C ++. Co muszę zrobić, aby skompilować C ++?

pythonic
źródło

Odpowiedzi:

149

Polecenie clangjest przeznaczone dla C, a polecenie clang++dla C ++.

adl
źródło
52

Nie wiem, dlaczego nie ma odpowiedzi bezpośrednio odnoszącej się do problemu. Jeśli chcesz skompilować program w C ++, najlepiej jest użyć clang++. Na przykład działa dla mnie:

clang++ -Wall -std=c++11 test.cc -o test

Jeśli skompilowany poprawnie, utworzy plik wykonywalny test, który można uruchomić za pomocą ./test.

Lub możesz po prostu clang++ test.ccskompilować program. Spowoduje to utworzenie domyślnego pliku wykonywalnego o nazwie a.out. Służy ./a.outdo uruchamiania pliku.

Cały proces jest bardzo podobny do g ++, jeśli znasz g ++. Zobacz ten post, aby sprawdzić, które ostrzeżenia są zawarte w -Wallopcji. Ta strona pokazuje listę flag diagnostycznych obsługiwanych przez Clang.

jdhao
źródło
4
Dzięki za odpowiedź na pytanie.
Curyous,
50

Ponadto, dla potomności - Clang (podobnie jak GCC) akceptuje -xprzełącznik do ustawiania języka plików wejściowych, na przykład

$ clang -x c++ some_random_file.txt

Ten wątek na liście mailingowej wyjaśnia różnicę między clangi clang++dobrze: Różnica między clang i clang ++

Kim Gräsman
źródło
4
Wystąpił błąd konsolidatora z clang -x c ++ podczas kompilowania pliku CPP z rozszerzeniem #include <iostream>. Flaga -lstdc ++ rozwiązała ten problem.
Slav
1
Mam teraz przed oczami kod źródłowy Clang. Podczas kompilacji (w systemie Windows) najpierw kompiluje clang.exe, a następnie kopiuje ten plik wykonywalny do clang++.exe. Jest to więc ten sam plik wykonywalny, tylko w czasie wykonywania sprawdza swoją własną nazwę, aby rozróżnić, czy zachowywać się jak kompilator C czy C ++. HTH.
Serge Rogatch
Na marginesie, opcja ta -x c++jest bardzo przydatne do postaci -extra-argdo szczęk-Tidy , aby zmusić go do leczenia .h plik zawierający C ++ zamiast C
Ad N
Jest to zbyt ograniczone, aby było użyteczne, chyba że tworzysz całość ze źródła. Lepiej jest po prostu użyć clang++i pozwolić mu wykryć, jakie rodzaje plików mu dostarczasz. Kiedy projekt może zawierać .cpppliki, .llpliki (LLVM IR) oraz .o, .a, .soa co nie pliki z bibliotek zewnętrznych, clang -x c++po prostu zwymiotować.
Sahsahae
5

Miałem podobny problem podczas budowania Clanga ze źródeł (ale nie z sudo apt-get install. Może to zależeć od wersji Ubuntu, którą używasz).

Warto sprawdzić, czy clang++można znaleźć poprawne lokalizacje Twoich bibliotek C ++:

Porównaj wyniki wyszukiwania g++ -v <filename.cpp>i clang++ -v <filename.cpp>pod hasłem „#include <...> wyszukiwanie zaczyna się tutaj:”.

Guy Adini
źródło
1

rozwiązanie 1:

  clang++ your.cpp

rozwiązanie 2:

  clang your.cpp -lstdc++

rozwiązanie 3:

   clang -x c++ your.cpp 
ligand
źródło
0

Otwórz okno terminala i przejdź do katalogu projektu. Uruchom następujące zestawy poleceń, w zależności od zainstalowanego kompilatora:

Aby skompilować wiele plików C ++ za pomocą clang ++:

$ clang++ *.cpp 
$ ./a.out 

Aby skompilować wiele plików C ++ przy użyciu g ++:

$ g++ -c *.cpp 
$ g++ -o temp.exe *.o
$ ./temp.exe
blastoise
źródło