Fordítás Clang-gal Arch Linuxon

Fórumok

Véletlenül nem tudja valaki, hogyan kell váltani Archon (Manjaron) clang és gcc között? Ubuntun ugye ott volna az update-alternatives, de Arch-on nincs ilyen.

Előre köszönöm.

Hozzászólások

Szia,

Nem tudok róla hogy bármilyen rendszer szintű beállítás lenne ami fixen vált gcc és clang között.

A helyedben a CC (c fordító) CXX (c++ fordító) CPP (c preprocesszor) LD (linker) környezeti változók környékén kezdeném a kotorászást.

Ha arch csomagokat fordítassz (pl AUR-ból) akkor a makepkg.conf -ban lehet ezeket megadni, ha bármi mást akkor build rendszer függő lehet a dolog de a legtöbb esetben a fenti környezeti változókkal megadható hogy mit használjanak..

Hát ez lehet, hogy jó Arch/Manjaro csomagok fordítására, de nekem független programokat kellene clang-gal fordítanom. Tehát arra volna szükség, hogy a

c++ hello.cpp

lefordítsa a hello.cpp-t clang-gal. Ubuntun ez úgy megy, hogy az update-alternatives utility elintézi, hogy a c++ (symlink) a clang++-ra vagy a g++-ra mutasson.

Ezeknek a linkeknek az átállítása nem triviális, mivel a clang csomagból többszáz fájl jön, és még a /bin-be is több tucat fájl kerül, úgyhogy nem világos, hogy miket kéne átlinkelni.

--
ulysses.co.hu

Bocs, tévedtem abban, hogy az átlinkelések nem triviálisak.

A következőképpen találtam meg a megoldást: Összevetettem Ubuntun a /etc/alternatives tartalmát két állapotban

1) amikor c++ a gcc-re volt állítva
2) és amikor c++ a clang-ra volt állítva

ahol az átállítás az Ubuntu/Debian hivatalos update-alternatives programjával történt.

Azt találtam, hogy az egyetlen eltérés, hogy a c++ symlink a g++-ra vagy a clang++-ra mutat. Tehát csak annyit kell tenni, hogy a a c++ helyett (ami manjaron hardlinkje a g++-nak) csinalni kell egy symlinket a clang++-ra.

--
ulysses.co.hu

Ezt megteheted de tartok tőle hogy a következő gcc update-nél akkora hátast fog dobni a pacman mint ide lacháza :/

Ahogy fent is írtam a legtöbb build rendszerben környezeti változókkal lehet befolyásolni a használt compilert, de ha nem írsz konkrét SW-t amit fordítani próbálsz úgy nehéz segíteni ;)

A legtöbb build rendszerben talán igen, de itt nem opció a build rendszer átírása. Egyébként a "c++" program csak egy frontend, a Debian/Ubuntuban is és a FreeBSD-ben is kapcsolható, hogy mi legyen mögötte. Az Arch/Manjaroban ez egyszerűen nincs kész.

Hogy dob-e hátast a pacman, arról majd beszámolok.

Furcsa, hogy a clang lassabb a gcc-nél. Egy kb. ezer objectes projektnél ugyanazzal az optimalizálással:

gcc real: 1m50
clang real: 2m8

Nincs jelentősége, csak azért írom, mert éppen azzal ment a kampány a clang javára, hogy az gyorsabb. De nem.

--
ulysses.co.hu

"Hogy dob-e hátast a pacman, arról majd beszámolok."

Most frissült a clang 6.0.1-ről 7.0.0-ra.

A c++ linket természetesen nem az eredeti helyén kell átírni, hanem jobb csinálni egy ~/bin/c++ linket, ami ide vagy oda mutat, plusz a ~/bin-t előre kell venni pathban. Ez minden Linuxban működik, és semmit nem zavar.
--
ulysses.co.hu

Addig volt csak gyorsabb, amíg kevesebb feature volt benne :) Most már "csak" a jobb diagnosztikai üzenetek és a széleskörű ráépülő tooling miatt érdemes a Clang-et választani.