D/Używanie kompilatora

< D

Aby 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.

Najprostsza 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

edytuj

Czę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 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