Praca z Code::Blocks

> Dodaj do ulubionych

1. Projekty w CodeBlocks

Instrukcje dotyczące rozdziałów 3 i 4 stanowią oficjalną dokumentację serwisu Wiki CodeBlocks i są dostępne tylko po angielsku.

Na poniższym zrzucie ekranu przedstawiony jest wygląd interfejsu użytkownika programu CodeBlocks.

Rysunek 1.1. Zintegrowane środowisko programistyczne (ang. integrated development environment — IDE) CodeBlocks
Rysunek 1.1. Zintegrowane środowisko programistyczne (ang. integrated development environment — IDE) CodeBlocks

Management (zarządzanie)
Okno zawierające kartę o nazwie Projects (projekty), która w dalszej części tekstu będzie nazywana widokiem projektu. W widoku tym pokazane są wszystkie otwarte w danym czasie projekty. Na karcie Symbols (symbole) wyświetlane są symbole, zmienne itp.
Editor (edytor)
Na powyższej ilustracji w oknie edytora otwarty jest plik źródłowy o nazwie hello.c.
Open files list (lista otwartych plików)
Zawiera listę wszystkich plików, które są otwarte w edytorze, tu: hello.c.
CodeSnippets (fragmenty kodu)
Okno to można wyświetlić klikając opcję View-CodeSnippets. W okienku tym można zarządzać modułami tekstowymi oraz łączami do plików i adresów URL.
Logs & others (dzienniki i inne)
W oknie tym wyświetlane są wyniki wyszukiwania, wpisy do dziennika dokonywane przez kompilator itd.

Na pasku stanu wyświetlane są następujące informacje:

  • Bezwzględna ścieżka do pliku otwartego w edytorze.
  • Edytor wykorzystuje domyślne kodowanie znaków systemu operacyjnego. Ustawienie to jest wyświetlane jako napis default (domyślny).
  • Numery wiersza i kolumny wyznaczające aktualne położenie kursora w edytorze.
  • Tryb wprowadzania tekstu za pomocą klawiatury (Insert lub Overwrite).
  • Aktualny stan pliku. Jeśli plik zostanie zmodyfikowany, pojawi się napis Modified (zmodyfikowany).W przeciwnym przypadku pole pozostaje puste.
  • Uprawnienia dostępu do pliku. Jeśli plik będzie tylko do odczytu, w pasku stanu zostanie wyświetlony napis Read   only. Pliki takie w oknie Open files list są dodatkowo oznaczane ikoną kłódki.

W aktywnym oknie edytora użytkownik może używać opcji z menu kontekstowego. W pojawiającym się oknie na karcie General (ogólne) można wybrać opcję File is read-only (plik tylko do odczytu). Jej wybór spowoduje zmianę uprawnień dostępu do pliku na tylko do odczytu jedynie w środowisku CodeBlocks. Natomiast ogólne atrybuty pliku w systemie plików pozostaną niezmienione.

  • Jeśli środowisko CodeBlocks zostanie uruchomione za pomocą wiersza poleceń przy użyciu polecenia –personality= <profile>, to w pasku stanu zostanie wyświetlony aktualnie używany profil. W przeciwnym przypadku program wyświetli napis default. Ustawienia środowiska CodeBlocks są przechowywane w pliku konfiguracyjnym <personality>.conf.

Środowisko CodeBlocks pozwala zarządzać projektami w kompleksowy i wszechstronny sposób. Poniżej znajduje się opis tylko niektórych funkcji związanych z zarządzaniem projektami.

1.1. Widok projektu

W CodeBlocks źródła i ustawienia procesu kompilacji są przechowywane w pliku projektowym <nazwa>.cbp. Typowymi składnikami projektów są pliki źródłowe C i C++ oraz odpowiadające im pliki nagłówkowe. Najprostszym sposobem na utworzenie projektu jest skorzystanie z opcji File-New-Project i postępowanie wg wskazówek kreatora. Pliki do utworzonego projektu można dodawać za pośrednictwem menu kontekstowego Add files (dodaj pliki) wyświetlanego w oknie Management.

Pliki projektu są rozmieszczane na podstawie ich rozszerzeń w różnych kategoriach. W CodeBlocks dostępne są następujące standardowe kategorie:

Sources (źródła)
zawiera pliki źródłowe z rozszerzeniami .c i .cpp.
ASM Sources (źródła ASM)
zawiera pliki źródłowe z rozszerzeniami .s, .S, .ss oraz .asm.
Headers (nagłówki)
zawiera pliki źródłowe z rozszerzeniem .h.
Resources (zasoby)
zawiera pliki opisu układu okien wxWidgets o rozszerzeniach .res i .xrc. Pliki tego typu są wyświetlane na karcie Resources w oknie Management.

Ustawienia dotyczące typów i kategorii plików można zmieniać za pośrednictwem opcji Project tree-Edit file types & categories (drzewo projektu-konfiguracja typów i kategorii plików) menu kontekstowego. W ustawieniach tych istnieje także możliwość zdefiniowania kategorii dla własnych rozszerzeń plików. Aby na przykład skrypty konsolidatora przechowywane w plikach o rozszerzeniu *.ld przenieść do kategorii o nazwie Linkerscript, należy tylko utworzyć nową kategorię o takiej nazwie.

Jeśli opcja menu kontekstowego Project tree-Categorize by file types (kategoryzuj wg typów plików) zostanie wyłączona, pliki będą wyświetlane bez podziału na kategorie w takiej kolejności, jak w systemie plików.

1.2. Uwagi do projektów

W CodeBlocks istnieje możliwość zapisywania tzw. uwag, czyli zwięzłych opisów lub wskazówek dotyczących projektów. Są one wyświetlane podczas otwierania projektu, dzięki czemu nowy użytkownik może przed rozpoczęciem pracy przeczytać podstawowe informacje o tym projekcie. Wyświetlanie uwag można włączyć lub wyłączyć na karcie Notes (uwagi) w oknie właściwości projektu wyświetlanym w wyniku kliknięcia opcji Properties w menu kontekstowym.

1.3. Szablony projektów

W CodeBlocks dostępny jest szeroki wachlarz szablonów projektów, które są wyświetlane podczas tworzenia nowego projektu. Można także zapisywać własne szablony zawierające spersonalizowane ustawienia przełączników kompilatora, optymalizacji, przełączników dotyczących sprzętu itp. Szablony są zapisywane w katalogu Documents and Settings<użytkownik>Dane aplikacjicodeblocksUserTemplates. Jeśli szablony mają być dostępne dla wszystkich użytkowników, należy je skopiować do odpowiedniego katalogu w folderze instalacyjnym CodeBlocks. Zostaną wyświetlone przy kolejnym uruchamianiu programu w okienku New-Project-User templates

Szablony dostępne w oknie kreatora projektów można modyfikować.W tym celu należy kliknąć wybrany szablon prawym przyciskiem myszy.

1.4 Tworzenie projektów przy użyciu celów kompilacji

Każdy projekt powinien występować w kilku wariantach. Warianty ten nazywają się celami kompilacji (Build Targets). Różnią się one między sobą opcjami kompilatora, ilością informacji diagnostycznych oraz wyborem plików. Cel kompilacji można także przenieść do innego projektu. Aby to zrobić, należy kliknąć opcję Project-Properties, przejść na kartę Build Targets i wybrać na niej odpowiedni wariant, a następnie kliknąć przycisk Create project from target (utwórz projekt z celu) — zobacz rysunek 1.2.

Rysunek 1.2: Cele kompilacji
Rysunek 1.2: Cele kompilacji

1.5. Cele wirtualne

Strukturę projektów można dodatkowo oprzeć na tzw. celach wirtualnych (ang. Virtual Targets). Wiele projektów ma strukturę opartą na dwóch celach kompilacji: Debug (diagnostyczny) zawierający informacje diagnostyczne i Release (do użytku) pozbawiony tych informacji. Różne cele kompilacji można łączyć dodając wirtualne cele korzystając z karty Project-Properties-Build Targets. Na przykład można utworzyć cel wirtualny o nazwie All, który będzie jednocześnie tworzył cele Debug i Release. Cele wirtualne są wyświetlane na pasku symboli kompilatora pod celami kompilacji.

1.6. Czynności wykonywane przed kompilacją i po kompilacji

W środowisku CodeBlocks istnieje możliwość skonfigurowania operacji, które mają być wykonywane przed lub po kompilacji projektu. Są to tzw. kroki prekompilacyjne (ang. Prebuilt Steps) i pokompilacyjne (ang. Postbuilt Steps). Typowe kroki pokompilacyjne to:

  • Zamiana utworzonego pliku obiektowego na format szesnastkowy Intel Hex
  • Modyfikacja plików obiektowych przy użyciu narzędzia objcopy
  • Generowanie plików zrzutu za pomocą narzędzia objdump

Przykład

Tworzenie dezasemblacji z pliku obiektowego w systemie Windows. Aby można było strumieniować dane do pliku, konsola cmd musi zostać uruchomiona z opcją /c.

cmd /c objdump -D name.elf > name.dis

Kolejnym przykładem kroku pokompilacyjnego może być archiwizacja projektu. W tym celu należy utworzyć cel kompilacji o nazwie Archive i dodać poniższą instrukcję do kroku pokompilacyjnego:

zip -j9 $(PROJECT_NAME)_$(TODAY).zip src h obj $(PROJECT_NAME).cbp

Polecenie to spowoduje spakowanie do pliku ZIP aktywnego projektu wraz z zasobami, nagłówkami i obiektami. Jednocześnie nastąpi pobranie wbudowanych zmiennych $(PROJECT_NAME) i $(TODAY) — nazwa projektu i bieżąca data (zobacz podrozdział 3.2). Po wykonaniu celu Archive spakowany plik zostanie zapisany w katalogu projektu.

W katalogu share/codeblocks/scripts znajduje się kilka przykładów skryptów. Nowy skrypt można dodać w oknie Settings-Scripting zaznaczając pole wyboru Register in menus. Jeśli na przykład zostanie wykonany skrypt make_dist z menu, to wszystkie pliki należące do projektu zostaną skompresowane w archiwum <project>.tar.gz.

1.7. Dodawanie skryptów do celów kompilacji

W środowisku CodeBlocks możliwe jest używanie w skryptach akcji menu. Skrypty stanowią dodatkowy mechanizm umożliwiający precyzyjną kontrolę nad projektami.


Skrypt można także dodać do celu kompilacji.

1.8. Przestrzeń robocza i zależności projektów

W CodeBlocks można otworzyć kilka projektów jednocześnie. Za pomocą opcji File-Save workspace (zapisz-zapisz przestrzeń roboczą) można je zebrać w jedną przestrzeń roboczą o nazwie <nazwa>.workspace. Gdy przy następnym uruchamianiu środowiska otworzy się plik <nazwa>.workspace, zostaną automatycznie otwarte wszystkie zapisane projekty.

Złożone projekty programistyczne mogą składać się z elementów tworzonych w kilku różnych projektach. Ponadto przy generowaniu takich systemów zawsze występują pewne zależności między tymi projektami.

Przykład

Projekt A zawiera podstawowe funkcje, które są udostępniane innym projektom w formie biblioteki. Jeśli kod źródłowy tego projektu zmieni się, biblioteka musi zostać poddana ponownej kompilacji. Aby zachować spójność między projektem B, w którym używane są te funkcje i projektem A, w którym są one zaimplementowane, projekt B musi być zależny od projektu A. Informacje dotyczące zależności projektowych są przechowywane w odpowiedniej przestrzeni roboczej, dzięki czemu każdy projekt można tworzyć osobno. Ponadto zależności umożliwiają kontrolowanie kolejności, w jakiej projekty mają być generowane. Zależności projektów można ustawić klikając przycisk Project’s dependencies w menu Project-Properties.

1.9. Dołączanie plików asemblera

W oknie Management widoku projektu pliki asemblera znajdują się w kategorii ASM Sources. Użytkownik może zmienić porządkowanie plików w kategoriach (zobacz 1.1). Kliknięcie prawym przyciskiem myszy pliku asemblera spowoduje wyświetlenie menu kontekstowego. Kliknij w nim opcję Properties (właściwości), aby otworzyć nowe okno. Następnie przejdź na kartę Build (kompilacja) i zaznacz pola wyboru Compile file (plik kompilacji) i Link file (plik konsolidacji). Później przejdź na kartę Advanced (zaawansowane) i wykonaj następujące czynności:

  1. W polu Compiler variable wpisz wartość CC
  2. Wybierz kompilator z listy rozwijanej For this compiler
  3. Zaznacz pole wyboru Use custom command to build this file
  4. W polu tekstowym poniżej wpisz: $compiler $options $includes <asopts> -c $file -o $object

Zmienne CodeBlocks są oznaczone znakiem $ (zobacz podrozdział 3.4). Są one ustawiane automatycznie, dzięki czemu samodzielnie trzeba tylko zmienić opcję asemblera <asopt>.

1.10. Edytor i narzędzia

1.10.1. Kod domyślny

W firmach programistycznych zazwyczaj istnieją ściśle określone zasady dotyczące układu plików źródłowych. Środowisko CodeBlocks umożliwia przestrzeganie takich zasad poprzez automatyczne dołączanie na początku każdego pliku źródłowego i nagłówkowego C/C++ określonej treści. Ta treść nazywa się kodem domyślnym. Aby skorzystać z tego ustawienia, kliknij kolejno Stettings-Editor-Default Code. Podczas tworzenia nowego pliku nastąpi rozwinięcie zmiennych, np. zdefiniowanych w oknie Settings-Global variables. Nowy plik można utworzyć za pomocą opcji File-New-File (plik-nowy-plik).

Przykład

  /*************************************************************************
   *  Project: $(proejct)
   *  Function:
   *************************************************************************
   *  $Author: mario $
   *  $Name:  $
   *************************************************************************
   *
   *  Copyright 2007 by company name
   *
   *************************************************************************/

1.10.2. Skróty

Dzięki skrótom można oszczędzić sobie dużo pisania. Skróty definiuje się w oknie Settings-Editor-Abbreviations, a wywołuje za pomocą skrótu klawiszowego Ctrl+J (zobacz rysunek 1.3).

Rysunek 1.3. Definiowanie skrótów
Rysunek 1.3. Definiowanie skrótów

W skrótach można także umieszczać parametry w postaci zmiennych $(NAZWA).

  #ifndef $(Guard token)
  #define $(Guard token)
  #endif // $(Guard token)

Zawartość zmiennych jest pobierana i wstawiana w ich miejsce w chwili rozwijania skrótu za pomocą skrótu klawiszowego Ctrl+J.

1.10.3. Personalizacja

Ustawienia środowiska CodeBlocks są zapisywane jako dane aplikacji w pliku o nazwie <użytkownik>.conf w katalogu codeblocks. Plik ten zawiera informacje o ostatnio otwieranych projektach, ustawieniach edytora, wyświetlaniu pasków symboli itp. Przy ustawieniach domyślnych dane konfiguracyjne są przechowywane w pliku default.conf. Jeśli program CodeBlocks zostanie uruchomiony za pomocą wiersza poleceń przy użyciu parametru –personality=myuser, to ustawienia zostaną zapisane w pliku o nazwie myuser.conf. Jeśli profil takie jeszcze nie istnieje, to zostanie utworzony. Dzięki temu można tworzyć profile dla różnych kroków pracy. Jeśli uruchomi się CodeBlocks z poziomu konsoli przy użyciu dodatkowego parametru –personality=ask, zostanie wyświetlone okno, w którym będzie można wybrać jeden z dostępnych profili.


Nazwa aktualnego profilu jest wyświetlona z prawej strony paska stanu.

1.10.4. Pliki konfiguracyjne

Ustawienia CodeBlocks są przechowywane w profilu default.conf w katalogu codeblocks w folderze Application Data. W przypadku używania personalizacji (zobacz podrozdział 1.10.3), dane konfiguracyjne są przechowywane w pliku <personalizacja>.conf.

Do zmieniania i zapisywania tych ustawień służy znajdujące się w katalogu instalacyjnym CodeBlocks narzędzie cb_share_conf.

Aby zdefiniować standardowe ustawienia dla kilku użytkowników komputera, plik konfiguracyjny default.conf należy zapisać w katalogu Documents and SettingsDefault UserApplication Datacodeblocks. Przy pierwszym uruchomieniu CodeBlocks skopiuje ustawienia użytkownika Default User do danych aplikacji bieżącego użytkownika.

Aby utworzyć przenośną wersję środowiska CodeBlocks, którą można zapisać na pamięci USB, należy wykonać czynności opisane poniżej. Skopiuj katalog instalacyjny CodeBlocks do pamięci USB i skopiuj do niego plik konfiguracyjny default.conf. Konfiguracja ta będzie używana jako globalny zestaw ustawień. Plik musi umożliwiać zapis, gdyż w przeciwnym przypadku zmiany dokonywane w konfiguracji nie będą zapisywane.

1.10.5. Nawigacja i wyszukiwanie

W CodeBlocks do plików i funkcji można przechodzić na kilka sposobów. Typową metodą jest tworzenie zakładek. Do tworzenia i usuwania zakładek w plikach źródłowych służy skrót Ctrl+B. Za pomocą kombinacji Alt+Page Up można przejść do poprzedniej zakładki, a za pomocą Alt-Page Down — do następnej.

Jeśli zaznaczy się przestrzeń roboczą lub projekt w przestrzeni roboczej w widoku projektu, to można wyszukać plik w projekcie. Należy wybrać pozycję Find file (znajdź plik) w menu kontekstowym, a następnie wpisać nazwę szukanego pliku. Jeśli plik zostanie znaleziony, naciśnięcie klawisza Enter spowoduje otwarcie tego pliku w edytorze (zobacz rysunek 1.4).

Rysunek 1.4. Szukanie plików
Rysunek 1.4. Szukanie plików

W CodeBlocks ułatwione jest przechodzenie między plikami nagłówkowymi i źródłowymi:

  1. Ustaw kursor w miejscu, w którym wpisana jest nazwa pliku nagłówkowego i otwórz ten plik korzystając ze znajdującej się w menu kontekstowym opcji open #include file (otwórz dołączany plik) — zobacz rysunek 1.5.
  2. Aby wielokrotnie przechodzić między plikiem źródłowym i nagłówkiem, należy używać opcji Swap header/source (zamieniaj nagłówek i źródło) z menu kontekstowego.
  3. Zaznacz na przykład w edytorze instrukcję define i wybierz z menu kontekstowego opcję Find declaration (znajdź deklarację), aby otworzyć plik zawierający odpowiednią deklarację.
Rysunek 1.5. Otwieranie pliku nagłówkowego
Rysunek 1.5. Otwieranie pliku nagłówkowego

Środowisko CodeBlocks zawiera kilka funkcji przeszukiwania plików i katalogów. Okno dialogowe wyszukiwania otwiera się za pomocą opcji Search-Find (szukaj-znajdź) — skrót klawiszowy Ctrl+F lub Find in Files (znajdź w plikach) — skrót klawiszowy Ctrl+Shift+F.

Dwie inne przydatne funkcje uruchamia się za pomocą skrótów klawiszowych Alt+G i Ctrl+Alt+G. W oknie dialogowym, które jest wyświetlane w wyniku ich naciśnięcia można wybierać pliki i funkcje, które chce się otworzyć w edytorze lub których implementacje chce się odnaleźć (zobacz rysunek 1.6). Aby zastosować wyszukiwanie przyrostowe, w oknie tym można używać symboli wieloznacznych, takich jak *, ? itp.

Za pomocą kombinacji Ctrl+Page Up można przejść do poprzedniej funkcji, a za pomocą Ctrl+Page Down — do następnej.

W edytorze można otworzyć za pomocą kombinacji klawiszy Ctrl+Tab okno dialogowe Open Files (otwórz pliki) zawierające listę plików, do których można przejść. Jeśli klawisz Ctrl jest wciśnięty, to wybrany plik można zaznaczyć na różne sposoby:

  1. Jeśli wybierze się pozycję za pomocą lewego klawisza myszy, to zostanie otwarty wybrany plik.
  2. Naciśnięcie klawisza Tab powoduje przechodzenie po kolei po znajdujących się na liście plikach. Zwolnienie klawisza Ctrl spowoduje otwarcie wybranego pliku.
  3. Jeśli umieści się kursor nad listą plików, to zostanie wyróżniony i zaznaczony ten plik, nad którym znajduje się kursor. Zwolnienie klawisza Ctrl spowoduje otwarcie wybranego pliku.
  4. Jeśli kursor znajduje się poza wyróżnionym wybranym plikiem, to pliki można wybierać za pomocą kółka myszy. Zwolnienie klawisza Ctrl spowoduje otwarcie wybranego pliku.

Częstym problemem występującym podczas programowania jest wyszukiwanie funkcji, które są zaimplementowane w różnych plikach. Wtyczka Browse Tracker pomaga rozwiązać ten problem wyświetlając informację, w jakiej kolejności pliki były zaznaczone. Następnie można wygodnie przechodzić między wywołaniami funkcji (zobacz podrozdział 2.8).

Numerowanie wierszy w CodeBlocks można włączyć zaznaczając pole wyboru Settings-Editor-General Settings-Show line numbers (ustawienia-edytor-ustawienia ogólne-pokaż numery wierszy). Aby wygodnie przejść do wiersza o określonym numerze, można użyć skrótu klawiszowego Ctrl+G lub polecenia menu Search-Goto line (szukaj-idź do wiersza).

Jeśli zostanie przytrzymany wciśnięty klawisz Ctrl i zaznaczony tekst w oknie edytora, to z poziomu menu kontekstowego można dokonać wyszukiwania np. w wyszukiwarce Google.

1.10.6. Widok symboli

W oknie Management środowiska CodeBlocks pokazane są symbole źródeł C/C++ w formie drzewa. Można skorzystać z tego widoku, aby przejść do wybranej funkcji lub zmiennej. Można ustawić, aby w widoku tym pokazywany był tylko bieżący plik, projekt albo cała przestrzeń robocza.

Wpisanie frazy do wyszukania lub nazwy symbolu w polu Search przeglądarki symboli spowoduje wyświetlenie znalezionych pozycji.

Dostępne są następujące kategorie symboli:

Global functions (funkcje globalne)
Lista odnośników do implementacji funkcji globalnych.
Global typedefs (globalne instrukcje typedef)
Lista użytych definicji typedef.
Global variables (zmienne globalne)
Symbole zmiennych globalnych.
Preprocessor symbols (symbole preprocesora)
Lista dyrektyw preprocesora utworzonych za pomocą dyrektywy #define.
Global macros (makra globalne)
Lista makr dyrektyw preprocesora.
Rysunek 1.7. Widok symboli
Rysunek 1.7. Widok symboli

Struktury i klasy są wyświetlane w „drzewie na dole” i można zmieniać sposób ich sortowania poprzez menu kontekstowe. Kliknięcie myszą kategorii powoduje wyświetlenie znalezionych w niej symboli w dolnej części okna (zobacz rysunek 1.7). Dwukrotne kliknięcie symbolu powoduje otwarcie pliku zawierającego jego definicję i przejście do odpowiedniego wiersza. Funkcję automatycznego odświeżania zawartości przeglądarki symboli bez zapisywania pliku można włączyć w menu Settings-Editor-Code Completion (zobacz rysunek 1.8). Jeśli projekt zawiera dużo symboli, może to negatywnie wpłynąć na wydajność działania środowiska CodeBlocks.

Rysunek 1.8. Włączanie przetwarzania na bieżąco
Rysunek 1.8. Włączanie przetwarzania na bieżąco
W edytorze listę klas można wyświetlić za pomocą opcji Insert Class method declaration implementation i All class methods without implementation menu kontekstowego.

1.10.7. Dołączanie zewnętrznych plików pomocy

Środowisko programistyczne CodeBlocks umożliwia dołączanie zewnętrznych plików pomocy poprzez menu Settings-Environment (ustawienia-środowisko). Należy dołączyć plik pomocy w formacie chm w sekcji Help Files (pliki pomocy), a następnie zaznaczyć pole wyboru This is the default help file (to jest domyślny plik pomocy) — zobacz rysunek 1.9. Napis $(keyword) jest symbolem zastępczym dla elementu wyboru w edytorze. Teraz kliknięciem myszy można wybrać funkcję w otwartym pliku źródłowym, a naciśnięcie klawisza F1 spowoduje wyświetlenie jej dokumentacji.

Jeśli dołączono kilka plików pomocy, można zaznaczyć frazę w edytorze i plik pomocy, w którym ma zostać ona wyszukana wybrać z menu kontekstowego Locate in.

Rysunek 1.9. Ustawienia plików pomocy
Rysunek 1.9. Ustawienia plików pomocy

W CodeBlocks można nawet dodać obsługę dla stron pomocy man. W tym celu należy dodać wpis man i określić ścieżkę w sposób przedstawiony poniżej.

man:/usr/share/man

Środowisko CodeBlocks ma wbudowaną przeglądarkę HTML (Embedded HTML Viewer), za pomocą której można otwierać proste pliki HTML w celu wyszukania w nich słów. Należy tylko skonfigurować ścieżkę do pliku HTML, który powinien być parsowany i zaznaczyć pole wyboru Open this file with embedded help viewer w menu Settings-Environment-Help Files.

Rysunek 1.10. Wbudowana przeglądarka HTM
Rysunek 1.10. Wbudowana przeglądarka HTM
Dwukrotne kliknięcie pliku HTML w oknie eksploratora plików (zobacz podrozdział 2.7) spowoduje uruchomienie wbudowanej przeglądarki HTML pod warunkiem, że nie ma żadnych skojarzeń z plikami HTML w zasadach obsługi rozszerzeń plików.

1.10.8. Dołączanie narzędzi zewnętrznych

Narzędzia zewnętrzne w CodeBlocks można dodawać za pomocą przycisku Tools-Configure Tools-Add (narzędzia, konfiguracja narzędzi-dodaj). Możliwy jest także dostęp do zmiennych wbudowanych (zobacz podrozdział 3.2) parametrów narzędzi. Ponadto istnieje kilka opcji dotyczących sposobu uruchamiania aplikacji zewnętrznych. Zewnętrzne aplikacje są zamykane wraz z CodeBlocks. Aby pozostawały otwarte po zamknięciu środowiska, należy włączyć opcję Launch tool visible detached.

1.11. Wskazówki dotyczące pracy ze środowiskiem CodeBlocks

W tej części rozdziału znajduje się opis niektórych przydatnych ustawień środowiska CodeBlocks.

1.11.1. Rejestracja zmian

Środowisko CodeBlocks ma funkcję pozwalającą śledzić zmiany w plikach źródłowych oraz wyświetlającą na marginesie kolorowe paski oznaczające zmiany. Świeże zmiany są oznaczane żółtym kolorem, a zmiany już zapisane w pliku — kolorem zielonym (zobacz rysunek 1.11). Do przechodzenia między zmianami można używać opcji menu Search-Goto next changed line (szukaj-przejdź do poprzedniego zmodyfikowanego wiersza) i Search-Goto previous changed line (szukaj-przejdź do następnego zmodyfikowanego wiersza). Funkcjom tym odpowiadają skróty klawiszowe Ctrl+F3 i Ctrl+Shift+F3.

Rysunek 1.11: Śledzenie zmian
Rysunek 1.11: Śledzenie zmian

Funkcję tę można włączyć i wyłączyć za pomocą pola wyboru Use Changebar (używaj paska zmian) znajdującego się w menu Settings-Editor-Margins and caret (ustawienia-edytor-marginesy i karetka).

Zamknięcie pliku powoduje utratę historii zmian, możliwości korzystania z funkcji cofania i ponawiania zmian oraz pasków zmian. Historię zmian można także wyczyścić nie zamykając pliku. W tym celu należy skorzystać z opcji Edit-Clear changes history (edycja-wyczyść historię zmian) lub odpowiedniej opcji w menu kontekstowym.

1.11.2. Wymiana danych z innymi aplikacjami

Środowisko CodeBlocks może wymieniać dane z innymi aplikacjami. W systemie Windows komunikacja odbywa się za pośrednictwem DDE (Dynamic Data Exchange), a w innych systemach operacyjnych — w oparciu o TCP.

Korzystając z tego interfejsu do CodeBlocks można wysyłać polecenia o składni przedstawionej poniżej.

[<polecenie>("<parametr>")]

Aktualnie do użytku dostępne są następujące polecenia:

Open

Polecenie

[Open("d:temptest.txt")]

zawiera parametr w postaci bezwzględnej ścieżki do pliku i otwiera ten plik w otwartym oknie CodeBlocks lub uruchamia najpierw CodeBlocks, jeśli jest taka potrzeba.

OpenLine

To polecenie otwiera plik i wyświetla wiersz o określonym numerze. Numer wiersza określa się za pomocą parametru :line.

[OpenLine("d:temptest.txt:10")]
Raise

Ustawia fokus na uruchomionym egzemplarzu programu CodeBlocks. W poleceniu tym nie można przekazać żadnego parametru.

1.11.3. Konfiguracja zmiennych środowiskowych

Konfiguracja systemu operacyjnego opiera się na użyciu tzw. zmiennych środowiskowych. Na przykład zmienna środowiskowa PATH zawiera ścieżkę do zainstalowanego w systemie kompilatora. System operacyjny taką zmienną przetwarza od początku do końca, tzn. to co znajduje się na końcu, jest przetwarzane jako ostatnie. Jeśli w systemie zostaną zainstalowane różne wersje kompilatora lub innych aplikacji, mogą wystąpić następujące sytuacje:

  • Uruchomienie niewłaściwej wersji programu
  • Zainstalowane pakiety programowe wywołują się nawzajem

Czasami w różnych projektach konieczne jest używanie różnych wersji narzędzi i kompilatorów. Jednym z możliwych rozwiązań tego problemu jest modyfikowanie systemowych zmiennych środowiskowych przed pracą nad każdym projektem. Jednak metoda ta stwarza duże ryzyko popełnienia błędu i jest nieelastyczna. W środowisku CodeBlocks rozwiązano tę kwestię w elegancki sposób. Istnieje możliwość tworzenia różnych konfiguracji zmiennych środowiskowych, które używane są tylko w obrębie CodeBlocks. Konfiguracje te można zmieniać. Na rysunku 1.12 przedstawione jest okno dialogowe, które można wyświetlić klikając pozycję Environment Variables (zmienne środowiskowe) znajdującą się w oknie Settings-Environment (ustawienia-środowisko). Do tworzenia konfiguracji służy przycisk Create (utwórz).

Rysunek 1.12. Zmienne środowiskowe
Rysunek 1.12. Zmienne środowiskowe

Zakres dostępności utworzonych w ten sposób zmiennych środowiskowych jest ograniczony do programu CodeBlocks. Zmienne środowiskowe można rozwijać tak, jak inne zmienne CodeBlocks za pomocą zapisu $(NAME).

Konfigurację zmiennej środowiskowej dla każdego projektu można wybrać w menu kontekstowym Properties karty EnvVars options.

Przykład

Używane środowisko można wpisać w krok pokompilacji (zobacz 1.6) w pliku <projekt>.env i zarchiwizować go w projekcie.

cmd /c echo %PATH% > project.env

w Linuksie

echo $PATH > project.env

1.11.4. Przełączanie perspektyw

Czasami przydatne jest posiadanie w CodeBlocks różnych konfiguracji lub widoków i zapisywanie ich. Domyślnie ustawienia (np. dotyczące wyświetlania pasków symboli, układy itp.) są przechowywane w pliku konfiguracyjnym default.conf. Korzystając z opcji wiersza poleceń –personality=ask podczas uruchamiania środowiska CodeBlocks, można wybrać różne ustawienia. Pomijając to globalne ustawienie, czasami zmiana widoków okien i pasków symboli może być też potrzebna w trakcie sesji. Typowymi przykładami takich sytuacji są edycja plików i diagnostyka projektów. W CodeBlocks zaimplementowany jest specjalny mechanizm umożliwiający przechowywanie i wybieranie różnych perspektyw nie wymagający ciągłego otwierania i zamykania okien i pasków symboli ręcznie. Aby zapisać perspektywę, kliknij pozycję View-Perspectives-Save current, a następnie w polu tekstowym, które zostanie wyświetlone wpisz nazwę. Procesowi temu można przypisać skrót klawiszowy za pomocą polecenia Settings-Editor-Keyboard shortcuts-View-Perspectives-<nazwa>. Dzięki temu można przełączać widoki za pomocą skrótów klawiszowych.

Innym przykładem jest edytowanie pliku w trybie pełnoekranowym bez pasków symboli. Można utworzyć perspektywę o nazwie Full i przypisać jej klawisz skrótu.

1.11.5. Przełączanie między projektami

Jeśli otwartych jest kilka projektów, użytkownik musi mieć możliwość szybkiego przechodzenia między nimi lub ich plikami. W CodeBlocks zdefiniowanych jest kilka skrótów klawiszowych, które to ułatwiają.

Alt+F5
Aktywuje poprzedni projekt z widoku projektów.
Alt+F6
Aktywuje następny projekt w widoku projektów.
F11
Przełącza w oknie edytora między plikiem źródłowym <nazwa>.cpp, a odpowiadającym mu plikiem nagłówkowym <nazwa>.h

1.11.6. Rozszerzone ustawienia dla kompilatorów

W trakcie kompilacji kompilator wyświetla komunikaty w oknie Log & others na karcie Build messages. Jeśli potrzebne są szczegółowe informacje, można rozszerzyć zakres informacji wyświetlanych przez kompilator. W tym celu należy kliknąć opcję Settings-Compiler and Debugger i przejść na kartę Other Settings.

Rysunek 1.13. Ustawianie szczegółów
Rysunek 1.13. Ustawianie szczegółów

Należy upewnić się, czy wybrany jest właściwy kompilator. Opcja Full command line znajdująca się na liście rozwijanej Compiler Logging powoduje wyświetlanie kompletnych informacji na karcie Build log. Ponadto dane te można zapisać w pliku HTML. Aby to zrobić, należy wybrać opcję Save build log to HTML file when finished. Dodatkowo na karcie Build log można wyświetlić pasek postępu. W tym celu należy włączyć opcję Display build progress bar.

1.11.7. Zmienianie rozmiaru tekstu w edytorze

Środowisko CodeBlocks zawiera bardzo funkcjonalny edytor. Można w nim zmieniać rozmiar tekstu. Aby powiększyć lub zmniejszyć rozmiar tekstu, należy nacisnąć klawisz Ctrl i trzymając go pokręcić kółkiem myszy.

Oryginalny rozmiar tekstu można przywrócić za pomocą skrótu klawiszowego Ctrl+Numepad+/ lub opcji Edit-Special commands-Zoom-Reset.

1.11.8. Zawijanie tekstu

Podczas edycji plików tekstowych, np. *.txt, może być przydatna funkcja zawijania tekstu, czyli dzielenia długich wierszy na kilka krótszych, aby można je było wygodnie edytować. Funkcję zawijania wierszy (Word wrap) można włączyć zaznaczając pole wyboru Word wrap w oknie Settings-Editor-General settings w obszarze Other Options. Naciśnięcie klawiszy Home i End powoduje przeniesienie kursora na początek lub koniec zawiniętego wiersza. Włączenie opcji Settings-Editor-Home key always move to caret to first column (w obszarze Other Options) powoduje, że naciśnięcie klawiszy Home lub End przenosi kursor zawsze na początek lub koniec bieżącego wiersza. Aby przenieść kursor na początek pierwszego wiersza bieżącego akapitu, należy użyć skrótu klawiszowego Alt+Home. Analogicznie, aby umieścić kursor na końcu bieżącego akapitu, należy użyć skrótu klawiszowego Alt+End.

1.11.9. Wybieranie trybów edytora

Środowisko CodeBlocks obsługuje różne tryby zaznaczania i wklejania tekstu.

  1. Tekst w edytorze można zaznaczyć przy użyciu lewego przycisku myszy. Za pomocą kółka myszy można przewinąć tekst do wybranego miejsca. Naciśnięcie środkowego klawisza myszy powoduje wklejenie wcześniej zaznaczonego tekstu. Funkcja ta odnosi się do każdego pliku z osobna, więc można ją traktować jako rodzaj schowka przypisanego do poszczególnych plików.
  2. Naciśnięcie klawisza Alt powoduje włączenie tzw. trybu zaznaczania blokowego, w którym za pomocą lewego przycisku myszy można dokonać prostokątnego zaznaczenia. Po zwolnieniu klawisza Alt można skopiować lub wkleić zaznaczony tekst. Funkcja ta jest przydatna, gdy trzeba zaznaczyć kilka kolumn tablicy, a następnie je skopiować i wkleić.
  3. W oknie Settings-Editor-Margins and Caret można włączyć tzw. wirtualne przestrzenie — opcja Enable virtual space. Dzięki włączeniu tej opcji zaznaczenie w trybie blokowym może zaczynać się lub kończyć w pustym wierszu.
  4. W oknie Settings-Editor-Margins and Caret można włączyć opcję Allow multiple selections. Dzięki niej trzymając wciśnięty klawisz Ctrl można w oknie edytora zaznaczyć za pomocą myszy kilka fragmentów tekstu. Tak zaznaczony tekst można przenieść do schowka za pomocą skrótów klawiszowych Ctrl+C lub Ctrl+X, a następnie wkleić w miejscu kursora za pomocą skrótu Ctrl+V. Z zaznaczaniem kilku fragmentów na raz związana jest też opcja o nazwie Enable typing (and deleting). Jest ona przydatna na przykład wtedy, gdy trzeba dodać dyrektywę preprocesora typu #ifdef w różnych wierszach kodu źródłowego lub gdy trzeba podmienić tekst w kilku różnych miejscach.
W większości menedżerów okien w systemach Linux kombinacja ALT+przeciągnięcie myszą z naciśniętym lewym przyciskiem powoduje przeniesienie okna, dlatego aby zaznaczanie blokowe było możliwe, trzeba w nich tę funkcję wyłączyć.

1.11.10. Zwijanie kodu

Środowisko CodeBlocks ma tzw. funkcję zwijania kodu. Dzięki niej można np. zwijać funkcje w edytorze. Miejsce zwinięcia kodu jest oznaczane znakiem minusa znajdującym się na lewym marginesie w oknie edytora. Ponadto początek i koniec zwinięcia są oznaczone pionową linią. Kliknięcie znaku minusa spowoduje zwinięcie danego fragmentu kodu, który można później rozwinąć klikając znak plusa zastępujący minusa. Funkcję zwijania można włączyć w menu Edit-Folding. W edytorze zwijany fragment jest oznaczony pionową linią.

Sposób i limit głębokości zwijania można ustawić w oknie Settings-Editor-Folding.

Funkcji zwijania można używać także dla dyrektyw preprocesora. Aby ją włączyć, należy zaznaczyć pole wyboru Fold preprocessor commands w oknie Settings-Editor-Folding.

Istnieje także możliwość definiowania własnych punktów zawijania przez użytkownika. Początek takiego punktu wyznaczają znaki komentarza z otwarciem nawiasu klamrowego, a koniec — znaki komentarza z zamknięciem nawiasu klamrowego.

 
  //{
  kod z zawijaniem zdefiniowanym  przez użytkownika
  //}

1.11.11. Automatyczne uzupełnianie

Gdy otwierany jest projekt w środowisku CodeBlocks, następuje analiza składni „Katalogów wyszukiwania” kompilatora i projektu oraz źródeł i nagłówków projektu. Ponadto parsowane są też słowa kluczowe pliku analizatora leksykalnego. Zebrane w ten sposób informacje są wykorzystywane w funkcji automatycznego uzupełniania. Aby dowiedzieć się czy funkcja ta jest włączona, należy to sprawdzić w ustawieniach edytora. Aby z niej skorzystać, można nacisnąć kombinację klawiszy Ctrl+spacja. W menu Settings-Editor-Syntax highlighting można dodać własne słowa kluczowe do analizatora leksykalnego.

1.11.12. Znajdowanie usuniętych plików

Jeśli plik należący do projektu <projekt>.cbp zostanie usunięty z dysku, to zostanie on w oknie projektu oznaczony specjalną ikoną. Aby usunąć plik z projektu, należy użyć opcji Remove file from project dostępnej w menu podręcznym.

W dużych projektach, w których znajduje się wiele podkatalogów szukanie usuniętych plików może być czasochłonne. Rozwiązaniem tego problemu w CodeBlocks jest wtyczka ThreadSearch (zobacz podrozdział 2.6). Wpisując w polu wyszukiwania tej wtyczki dowolną frazę i zaznaczając opcję Project files lub Workspace files można spowodować sparsowanie wszystkich plików należących do projektu lub przestrzeni roboczej. Jeśli wtyczka ThreadSearch znajdzie uszkodzony plik, poinformuje o tym użytkownika.

1.11.13. Dołączanie bibliotek

Bibliotekę do projektu można dodać za pomocą przycisku Add, który znajduje się na karcie Linker settings w oknie Settings-Compiler and Debugger. Można podać zarówno ścieżkę bezwzględną dołączanej biblioteki, jak i tylko nazwę bez przedrostka lib i rozszerzenia pliku.

Przykład

Aby dodać bibliotekę o nazwie <ścieżka>libslib<nazwa>.a, należy wpisać tylko ><nazwa>. Konsolidator znajdzie tę bibliotekę korzystając z odpowiednich ścieżek poszukiwań.

Inny sposób dodawania bibliotek jest opisany w podrozdziale 2.10.

1.11.14. Kolejność dołączania plików obiektowych

Podczas kompilacji dla każdego pliku źródłowego nazwa.c/cpp tworzony jest plik obiektowy nazwa.o . Następnie konsolidator wiąże te pliki obiektowe z aplikacją nazwa.exe albo, w przypadku systemów wbudowanych, nazwa.elf. Czasami trzeba określić kolejność dołączania plików obiektowych. W CodeBlocks można w tym celu skorzystać z możliwości przypisywania priorytetów. Priorytet pliku można określić klikając w menu kontekstowym opcję Properties i przechodząc na kartę Build. Im niższy priorytet, tym wcześniej dany plik zostanie dołączony przez konsolidator.

1.11.15. Automatyczne zapisywanie

W środowisko CodeBlocks istnieje możliwość automatycznego zapisywania projektów i plików źródłowych oraz tworzenia kopii zapasowych. Funkcję tę można włączyć w oknie Settings-Environment-Autosave. Jako metodę tworzenia kopii zapasowej należy z listy rozwijanej Method wybrać pozycję Save to .save file.

1.11.16. Ustawienia dotyczące rozszerzeń plików

Rozszerzenia w CodeBlocks można traktować na kilka różnych sposobów. Okno dialogowe z tymi ustawieniami można otworzyć klikając kolejno Settings-Environment-Files extension handling. Można pozostawić skojarzenia programów zewnętrznych z plikami zdefiniowane przez system Windows (Launch the associated application), zmienić je na inne wg własnych potrzeb albo wybrać opcję otwierania w edytorze CodeBlocks (Open it in a Code::Blocks editor).

Jeśli do rozszerzenia pliku zostanie przypisany nowy zewnętrzny program, należy usunąć zaznaczenie opcji Disable Code::Blocks while the external program is running, ponieważ jeśli się tego nie zrobi, środowisko CodeBlocks będzie zamykane w każdym przypadku otwarcia pliku o danym rozszerzeniu.

1.12. Środowisko CodeBlocks w wierszu poleceń

Środowisko programistyczne CodeBlocks można uruchamiać w wierszu poleceń, bez graficznego interfejsu użytkownika. W trybie tym dostępnych jest kilka przełączników pozwalających kontrolować proces kompilacji projektów. Dzięki temu, że środowiskiem CodeBlocks można sterować przy użyciu skryptów, zadania tworzenia plików wykonywalnych można zintegrować z własnymi procesami roboczymi.

codeblocks.exe /na /nd --no-splash-screen --built <nazwa>.cbp --target='Release'
<nazwapliku>

Określa nazwę pliku *.cbp projektu lub *.workspace przestrzeni roboczej. Na przykład w miejsce parametru <nazwapliku> można wstawić project.cbp. Argument ten należy umieścić na końcu polecenia, przed przekierowaniem wyjścia, jeśli jest używane.

–file=<nazwapliku>[:line]

Otwiera plik w Code::Blocks i opcjonalnie przechodzi do wiersza o podanym numerze.

/h, –help

Wyświetla pomoc na temat argumentów wiersza poleceń.

/na, –no-check-associations

Nie sprawdza powiązań plików (dostępne tylko w systemie Windows).

/nd, –no-dde

Nie uruchamia serwera DDE (tylko Windows).

/ni, –no-ipc

Nie uruchamia serwera IPC (tylko Linux i Mac).

/ns, –no-splash-screen

Nie wyświetla ekranu powitalnego podczas uruchamiania aplikacji.

/d, –debug-log

Wyświetla dane diagnostyczne aplikacji.

–prefix=<str>

Ustawia przedrostek wspólnego katalogu na dane.

/p, –personality=<str>, –profile=<str>

Określa personalizację, która ma zostać użyta. Za pomocą parametru ask można wyświetlić pełną listę dostępnych personalizacji.

–rebuild

Czyści i ponownie kompiluje projekt lub przestrzeń roboczą.

–build

Kompiluje projekt lub przestrzeń roboczą.

–target=<str>

Ustawia cel kompilacji. Na przykład –target=’Release’.

–no-batch-window-close

Zachowuje na widoku okno dziennika partii po zakończeniu kompilacji partii.

–batch-build-notify

Wyświetla komunikat, gdy zakończy się kompilacja partii.

–safe-mode

Wyłącza wszystkie wtyczki przy uruchamianiu.

> <plik dziennika kompilacji>

Kieruje wyjście standardowe do pliku dziennika. Argument ten powinien znajdować się na samym końcu polecenia. Nie jest to opcja środowiska CodeBlocks, lecz standardowe przekierowanie powłok systemów DOS i *nix.

1.13. Skróty

Mimo iż środowisko programistyczne takie jak CodeBlocks obsługuje się głównie za pomocą myszy, skróty klawiszowe pozwalają przyspieszyć wiele działań i usprawnić pracę. W poniższej tabeli zebrane zostały niektóre z dostępnych skrótów klawiszowych.

1.13.1. Edytor

FunkcjaSkrót klawiszowy
Cofnięcie ostatniej czynnościCtrl+Z
Ponowienie ostatniej czynnościCtrl+Shift+Z
Zamiana nagłówka/źródłaF11
Zakomentowanie zaznaczonego koduCtrl+Shift+C
Odkomentowanie zaznaczonego koduCtrl+Shift+X
Automatyczne uzupełnianie/skrótyCtrl+spacja/Ctrl+J
ZakładkaCtrl+B
Przejście do następnej zakładkiAlt+Page Up
Przejście do poprzedniej zakładkiAlt+Page Down

Lista skrótów klawiszowych dostępnych w edytorze środowiska CodeBlocks. Skrótów tych nie można zmieniać.

FunkcjaSkrót klawiszowy
Utworzenie lub usunięcie zakładkiCtrl+F2
Przejście do następnej zakładkiF2
Wybór następnej zakładkiAlt+F2
Wyszukanie zaznaczeniaCtrl+F3
Wyszukanie zaznaczenia wsteczCtrl+Shift+F3
Znalezienie pasującego warunku preprocesora, pomijając zagnieżdżoneCtrl+K

1.13.2. Pliki

FunkcjaSkrót klawiszowy
Nowy plik lub projektCtrl+N
Otwarcie istniejącego pliku lub projektuCtrl+O
Zapisanie bieżącego plikuCtrl+S
Zapisanie wszystkich plikówCtrl+Shift+S
Zamknięcie bieżącego plikuCtrl+F4/Ctrl+W
Zamknięcie wszystkich plikówCtrl+Shift+F4/Ctrl+Shift+W

1.13.3. Widok

FunkcjaSkrót klawiszowy
Pokazanie/ukrycie okienka komunikatówF2
Pokazanie ukrycie okienka ManagementShift+F2
Aktywacja poprzednika (w drzewie projektu)Alt+F5
Aktywacja następnego (w drzewie projektu)Alt+F6

1.13.4. Wyszukiwanie

FunkcjaSkrót klawiszowy
ZnajdźCtrl+F
Znajdź następnyF3
Znajdź poprzedniShift+F3
Znajdź w plikachCtrl+Shift+F
ZamieńCtrl+R
Zamień w plikachCtrl+Shift+R
Przejdź do wierszaCtrl+G
Przejdź do następnego zmienionego wierszaCtrl+F3
Przejdź do poprzedniego zmienionego wierszaCtrl+Shift+F3
Przejdź do plikuAlt+G
Przejdź do funkcjiCtrl+Alt+G
Przejdź do poprzedniej funkcjiCtrl+Page Up
Przejdź do następnej funkcjiCtrl+Page Down
Przejdź do deklaracjiCtrl+Shift
Przejdź do implementacjiCtrl+.
Otwórz załączany (include) plikCtrl+Alt+.

1.13.5. Kompilacja

FunkcjaSkrót klawiszowy
Kompilacja całościCtrl+F9
Kompilacja bieżącego plikuCtrl+Shift+F9
UruchomCtrl+F10
Kompilacja i uruchomienieF9
Ponowna kompilacja całościCtrl+F11