D/Używanie kompilatora
GDC
edytujAby skompilować i podlinkować plik źródłowy foo.d do pliku bar należy wykonać polecenie:
gdc foo.d -o bar
Aby pominąć linkowanie (utworzyć obiekt czyli plik *.o) należy dodać parametr -c. Bez podania wynikowego pliku wykonywalnego (parametrem -o), zostanie on zapisany do pliku a.out (tak jak gcc).
GDC jest frontendem dla GCC, toteż dziedziczy po nim większość przełączników (zobacz dokumentację GCC), m.in:
- -O2 - włącza optymalizacje
- -O3 - włącza agresywne optymalizacje (w tym inlinowanie)
- -Wall - włącza rozszerzone raportowanie ostrzeżeń kompilacji
Dodatkowo posiada przełączniki charakterystyczne dla języka D:
- -frelease - kompiluje w wersji release (vide VersionSpecification)
- -fdeprecated - zezwala na użycie kodu oznaczonego atybutem deprecated
- -fversion=foo - kompiluje w wersji foo
- -f[no-]bounds-check - ustala, czy kompilator ma sprawdzać długości tablic
Więcej parametrów znajdziesz w dokumentacji.
DMD
edytujNajprostsza kompilacja polega na podaniu plików źródłowych składających się na program:
dmd foo.d
Program wynikowy będzie znajdował się w pliku foo (lub foo.exe na platformie Windows)
Z częściej używanych przełączników należy wspomnieć:
- -c - nie linkuje do pliku wykonywalnego (powstanie jedynie plik foo.o)
- -ofbar - zapisuje wynik w pliku bar
- -O - włącza optymalizacje
- -inline - włacza optymalizacje inline
- -debug - generuje dodatkowy kod sprawdzający
- -unittest - wkompilowuje testy jednostkowe (zostaną one uruchomione przed wykonaniem samego programu)
- -release - usuwa kod debugujący, w tym sprawdzania poprawności dostępu do tablic, oraz kontrakty i wszystkie asercje
- -g, -gc - dodaje do plików obiektowych informacje debugujące użyteczne w debugerach takich jak GDB, czy bibliotekach wykorzystujących mechanizmy refleksji
- -D - włącza generacje dokumentacji ddoc
- -w - włącza dodatkowe ostrzeżenia przy kompilacji
- -Iścieżka - dodaje ścieżkę do listy przeszukiwanych katalogów z modułami
Generalnie dobrym pomysłem jest używanie następujących opcji przy pisaniu programu:
dmd -debug -unittest -g -w foo.d
A dopiero po upewnieniu się że wszystko jest w porządku:
dmd -O -release -w foo.d
Dokładny opis użycia, oraz wszystkich opcji można otrzymać po uruchomieniu dmd bez parametrów, oraz w dokumentacj na stronie Digital Mars.
Brakujący plik object.d
edytujCzęsto spotyka się sytuację w której po świeżej instalacji kompilatora DMD kompilacja jakiegokolwiek programu powoduje wyświetlenie następującego komunikatu:
$ dmd d.d object.d: module object cannot read file 'object.d'
W takiej sytuacji należy przeedytować plik /etc/dmd.conf, aby wskazywał prawidłowe ścieżki do biblioteki standardowej Phobos, na przykład:
[Environment] DFLAGS=-I/usr/lib/dmd/src/phobos
Szczegóły zależą od konkretnej instalcji kompilatora oraz systemu operacyjnego. W dokumentacji kompilatora znajdują się dokładne instrukcje prawidłowej instalacji.
gdmd
edytujgdmd jest prostym skryptem (tzw. wrapper), rozprowadzanym razem z kompilatorem GDC, który ma identyczną semantykę co opcje kompilatora dmd. Na przykład
gdmd foo.d
spowoduje wykonanie
gdc -o foo foo.d
W przygotowaniu: kompilacja przy użyciu dmd, oraz wrapper gdmd dla gdc |