Borland C++ Compiler/BCC32
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> |
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:
- kompilujemy pliki *.cpp z opcją -c
- 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!
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.