Borland C++ Compiler/BCC32

Z Wikibooks, biblioteki wolnych podręczników.

Wywołanie[edytuj]

BCC32 [<opcje>] <src>
<opcje>
określamy sposób kompilacji wpisując odpowiednie symbole znakowe (ich opis jest poniżej); sam BCC32 ma jakieś 230 opcji więc jest w czym wybierać ;) muszą być one jedna od drugiej oddzielone spacją.
<src>
tu umieszczamy wszystkie pliki źródłowe *.cpp lub (*.obj i *.lib) w zależności na jakim etapie kompilacji jesteśmy oddzielone spacjami.

Zakładając, że jesteśmy w katalogu ze źródłami przykładowe wywołanie BCC32 może wyglądać tak:

bcc32 -M -v -tW Hello.cpp klasa.cpp

Opcje[edytuj]

Źródła[edytuj]

opcja opis
-P kompiluj wszystkie pliki jako źródła C++ bez znaczenia na ich rozszerzenia
-H=<nazwa> zdefiniuj nazwę <nazwa> pliku nagłówkowego
-Hh=<plik> zaprzestań prekompilacji po pliku nagłówkowym <plik>
-E<nazwa> zdefiniuj nazwę asemblera
-T<opcja> poślij opcje <opcja> do asemblera
-I<lokalizacja/e> możesz tutaj zdefiniować dodatkową lokalizacje (poza tymi wpisanymi w bcc32.cfg) plików nagłówkowych (jeżeli jest ich więcej niż jedna, to użyj ';' jako seperatora)
-L<lokalizacja/e> to samo co wyżej tyle że z bibliotekami
-v kompilacja w trybie DEBUG (jeżeli masz zamiar debugować program musisz dodać tę opcję)

Wynik[edytuj]

opcja opis
-tW aplikacja Win32 (EXE)
-tWM aplikacja wielowątkowa
-tWC program konsolowy dla Windows (EXE)
-tWD biblioteka DLL
-e<nazwa> zdefiniuj nazwę pliku EXE jaki ma być generowany
-o<nazwa> zdefiniuj nazwę pliku OBJ jaki ma być generowany
-l<opcja> poślij opcje <opcja> do wywołania konsolidatora (vel linkera)
-S zamień podane źródło w C/C++ na kod asemblera
-c kompiluj do OBJ, nie wywołuj konsolidatora
-n<lolkalizacja> zapisz plik(i) wynikowe kompilacji do katalogu <lokalizacja>

Optymalizacja[edytuj]

Kompilator BCC32 pozwala nam na optymalizację naszego kodu źródłowego:

opcja opis
-Oc eliminuj duplikaty deklaracji
-O1 optymalizuj pod względem wielkości pliku wynikowego
-O2 optymalizuj program pod wzg. szybkości działania
-G połączenie opcji -O1 i -O2
-Od nie optymalizuj

Wyjście[edytuj]

Podczas kompilacji w linii poleceń pojawia się wiele komunikatów/ostrzeżeń, na które nie musisz zwracać uwagi (ale często są one bardzo pomocne w poszukiwaniu błędów w kodzie źródłowym).

opcja opis
-q pomijaj nagłówek kompilatora
-w pokazuj wszystkie ostrzeżenia (używaj gdy w kodzie źródłowym jest błąd)
-w<xxx> pokazuj ostrzeżenie <xxx> (zajrzyj do manuala po liste ostrzerzeń)
-w-<xxx> nie pokazuj ostrzeżenia <xxx> (zajrzyj do manuala po liste ostrzerzeń)
-w-par nie pokazuj ostrzeżenia "parametr, parametr is never used"
-w-rvl nie pokazuj ostrzeżenia "function shuld return a value"

Response & configuration files[edytuj]

Gdyby tak wpisywać te wszystkie opcje przy każdorazowej kompilacji, to człowiek by zwariował :), dlatego dla wygody programisty twórcy FCLT wymyślili tzw. configuration files, w których możesz umieszczać standardowe (dla Ciebie) opcje BCC32. Już jeden taki plik stworzyłeś podczas instalacji kompilatora, nosił on nazwę bcc32.cfg i jego zawartość jest "wklejana" za każdym razem w parametry wywołania BCC32. Zaglądając do niego możesz dodać swoje osobiste opcje, które chcesz aby były dodawane przy każdym wywołaniu BCC32. Jeżeli chcesz, możesz zrobić jakieś dodatkowe pliki *.cfg i wtedy inaczej kompilować jedne pliki, a inaczej drugie. Warto np. utworzyć pliki:

  • win.cfg
  • dos.cfg

i umieścić tam odpowiednie opcje w zależności pod jaki system chcemy kodować. Kompilacja z uwzględnieniem danego pliku konfiguracyjnego (oczywiście bcc32.cfg nie musisz już dodawać) powinno odbywać się w następujący sposób:

bcc32 +[<lokalizacja>\]<nazwa>.cfg [<opcje>] <src>

Na przykład:

bcc32 +C:\win.cfg -q Hello.cpp

Taki win.cfg może przykładowo zawierać linijkę:

-tW -c -w-par -w-rvl

Poza configuration files mamy również możliwość utworzenia response file (z ang. plik reagowania czy jakoś tak :/). Różnią się one od plików konfiguracyjnych tym, że można w nich umieszczać dodatkowo nazwy plików, które chcesz skompilować, więc używaj ich przy pracy z większymi projektami, gdy nie chce Ci się przy każdym wywołaniu wpisywać nazwy wszystkich opcji i plików wchodzących w skład projektu. Dołączenie response file'a wygląda tak:

bcc32 @[<lokalizacja>\]<plik>

Na przykład:

bcc32 @C:\projekt\project.txt

Wtedy w pliku project.txt możesz wpisać:

-tW -c -q -w-par -w-rvl Hello.cpp klasa.cpp

BCC32 i ILINK32[edytuj]

Jak wiemy z rozdziału 1-ego BCC32 sam wywołuje ILINK32 (konsolidator). Dzięki temu proces konsolidacji programu możemy również przeprowadzić przy pomocy BCC32. Czasami jest to niezbędne gdy chcemy w programie użyć jakiś dodatkowych bibliotek. W takim przypadku postępujemy wg schematu:

  1. kompilujemy pliki *.cpp z opcją -c
  2. wywołujemy BCC32 podając w parametrach wywołania wszystkie pliki *.obj jakie otrzymaliśmy po etapie kompilacji oraz dodatkowe biblioteki które chcemy użyć w programie

A oto przykład:

kompilacja (pkt. 1):

bcc32 -c hello.cpp

konsolidacja (pkt. 2):

bcc32 hello.obj shell32.lib user.lib

Kompilator automatycznie pośle to polecenie do konsolidatora, a my wcale nie musimy uczyć się składni ILINK32!

Zasoby?[edytuj]

Jeśli chcemy dołączyć zasoby do swojego programu to musimy napisać odpowiedni skrypt z rozszerzeniem *.rc, a następnie skompilować go narzędziem BRCC32 z FCLT:

brcc32 <zasoby>.rc

gdzie <plik> oznacza nazwę nie skompilowanego skryptu zasobów (bez rozszerzenia). BRCC32 wygeneruje wówczas plik <zasoby>.RES. Trzeba pamiętać, żeby w głównym pliku źródłowym projektu (tam gdzie znajduje się funkcja WinMain()) na samym początku dopisać linijkę z deklaracją tego pliku:

#pragma resource "<zasoby>.RES"

Teraz można już spokojnie zacząć kompilację wiedząc, że zasoby będą dołączone do pliku EXE.