November 21, 2025, Friday, 324

Języki Programowania 8

From MJanik

Revision as of 13:23, 19 November 2025 by Majanik (Talk | contribs)
Jump to: navigation, search

Makefile - instrukcja


Makefile

Czym jest Makefile? Makefile to plik konfiguracyjny używany przez narzędzie make do automatyzacji procesu kompilacji. Pozwala definiować zasady budowania programu: które pliki należy skompilować, w jakiej kolejności i z jakimi poleceniami.

Po co stosować Makefile?

  * Automatyzuje budowę programu (kompilacja, linkowanie, czyszczenie plików pośrednich).
  * Skraca czas — kompilowane są tylko pliki, które zostały zmodyfikowane.
  * Upraszcza pracę w dużych projektach z wieloma plikami źródłowymi.
  * Pozwala definiować własne cele (targets), np. make clean.

Najczęstsze elementy Makefile

  * *Cel (target)* – nazwa zadania, np. main.
  * *Reguła (rule)* – określa zależności i polecenia, które mają zostać wykonane.
  * *Zależności (dependencies)* – pliki, od których zależy dany cel.
  * *Polecenia (commands)* – komendy wykonywane przez make (musi je poprzedzać tabulator!).

Przykładowy Makefile <verbatim> CXX=g++ CXXFLAGS=-Wall -O2

main: main.o utils.o

   $(CXX) $(CXXFLAGS) main.o utils.o -o main

main.o: main.cpp utils.hpp utils.o: utils.cpp utils.hpp

clean:

   rm -f *.o main

</verbatim>

Kiedy używać Makefile?

  * Gdy projekt składa się z więcej niż jednego pliku źródłowego.
  * Gdy chcesz mieć powtarzalny i automatyczny proces budowania.
  * Gdy potrzebujesz wygodnego sposobu zarządzania kompilacją i plikami pośrednimi.

Podsumowanie Makefile jest prostym, ale bardzo skutecznym narzędziem umożliwiającym automatyzację kompilacji w projektach C/C++. Ułatwia zarządzanie kodem, oszczędza czas i pozwala utrzymać porządek w projekcie.





Kontener STL std::vector

Czym jest std::vector? std::vector to sekwencyjny kontener z biblioteki STL, który przechowuje elementy w sposób ciągły w pamięci. Umożliwia dynamiczne powiększanie i zmniejszanie rozmiaru podczas działania programu. Dostarcza szybki dostęp do elementów przez indeks (operacja O(1)) oraz efektywne dodawanie na końcu (amortyzowane O(1)).

Najważniejsze cechy

  * Elementy są przechowywane w kolejności dodania.
  * Rozmiar może się zmieniać w trakcie działania programu.
  * Zapewnia dostęp za pomocą operatora [] i metody at().
  * Posiada bogaty zestaw metod do modyfikowania zawartości.

Najczęściej używane metody

  * push_back(x) – dodaje element na końcu.
  * pop_back() – usuwa ostatni element.
  * size() – zwraca liczbę elementów.
  * empty() – sprawdza, czy wektor jest pusty.
  * clear() – usuwa wszystkie elementy.
  * begin(), end() – iteratory pozwalające przechodzić po wektorze.

Przykład użycia

#include <vector> 
#include <iostream>

int main() {
   std::vector<int> liczby;
   liczby.push_back(10);
   liczby.push_back(20);
   liczby.push_back(30);
   for (size_t i = 0; i < liczby.size(); i++) {
       std::cout << liczby[i] << std::endl;
   }
   return 0;
}

Kiedy używać std::vector?

  * Gdy potrzebujesz dynamicznej tablicy.
  * Gdy kluczowy jest szybki dostęp do elementów.
  * Gdy dane często dodajesz na końcu kontenera.
  * Gdy zależy Ci na prostocie i efektywności.

Zalety

  * Bardzo szybki dostęp do elementów.
  * Kompaktowe przechowywanie danych w pamięci.
  * Prosta obsługa i szerokie wsparcie w STL.

Wady

  * Wstawianie elementów w środku jest kosztowne (przesuwanie danych).
  * Przealokowanie podczas powiększania może czasem kosztować więcej czasu.

Podsumowanie std::vector to najczęściej używany kontener STL dzięki swojej wydajności, elastyczności i intuicyjności. W większości przypadków stanowi zalecaną strukturę do przechowywania sekwencji danych w C++.