Zadania domowe z systemów budowania === Rozwiązanie zadania nr X, należy umieścić w katalogu `make/X` Waszego repozytorium Git-a. Termin oddania rozwiązań: 25 października 2022. W każdym zadaniu można wybrać dowolny kompilator języka C++ dostępny na `boss`ie. Zadanie 1. --- Napisz program `test.cc`, który będzie wypisywał na standardowe wyjście informację, czy został zbudowany z flagą `-DDEBUG`. Stwórz plik `Makefile`, który będzie umożliwiał kompilację dwóch binarek: 1. `test`, która będzie kompilowana bez `-DDEBUG`, 2. `test-debug`, która będzie kompilowana z `-DDEBUG`. Wskazówka: https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html Zadanie 2. --- Napisz dwa programy komputerowe: 1. `smatch`, który wczytuje dwa napisy i stwierdza, czy pierwszy jest podsłowem drugiego; 1. `rotation`, który wczytuje dwa napisy i swierdza, czy są swoimi rotacjami cyklicznymi. Zarówno w pierwszym jak i drugim programie użyj algorytmu KMP, ale jego implementację umieść w jednym, oddzielnym pliku. Wybierz swój ulubiony system budowania i go użyj do kompilowania obu programów. Zadanie 3. --- To zadanie polega na skompilowaniu i użyciu jednego z moich ulubionych programów komputerowych - `cbmc`. Znajdź jego źródła na GitHubie, sklonuj repozytorium, skompiluj źródła na **bossie** korzystając z `CMake`, a następnie użyj tego programu, żeby znaleźć wszystkie wartości `x` typu `int`, takie że `x == -x`. Wszystko to nagraj programem `script`, a trankypcję sesji terminala umieść w pliku `cbmc.txt`. Wskazówki: 1. https://github.com/diffblue/cbmc/blob/develop/COMPILING.md 1. `man 1 script` 1. http://www.cprover.org/cprover-manual/cbmc/tutorial/ 1. Na bossie nie ma programu `mvn` (i chyba dobrze). Cóż zrobić w takiej sytuacji? 1. `cmbc` długo się kompiluje. Czy istnieje opcja zrównoleglająca kompilację, przez co trwa to krócej? Zadanie 4. --- Napisz program, który będzie wykonywał proste operacje arytmetyczne na akumulatorze. W pierwszym wierszu wejścia znajduje się jedna liczba całkowita - początkowa wartość akumulatora. W kolejnych wierszach znajdują się operacja do wykonania oraz jej argument. Operacja to jedno z `+`, `-`, `*` lub `/`. Argument jest liczbą całkowitą. Dzielenie zaokrągla do zera, a dzielenie przez zero nie wystąpi. Po wykonaniu każdej operacji należy wypisać aktualną wartość akumulatora. Na przykład, dla wejścia ``` 42 + 5 * 7 - 521 / 4 ``` poprawnym wynikiem jest ``` 47 -192 -48 ``` Nie należy niczego zakładać na temat ilczby operacji do wykonania, ani wielkości liczb (czy to na wejściu, czy na wyjściu). Można (a nawet należy) użyć biblioteki `gmp`. Wybierz jeden z systemów budowania programów napisanych w języku `C++` (tzn. `make` albo `cmake`) i przygotuj konfigurację kompilującą Twój program (tzn. plik `Makefile` albo `CMakeLists.txt`). Jeśli wybrałeś `make`, to do znalezienia poprawnych opcji kompilacji / linkowania użyj programu `pkg-config` (nie chcę widzieć gołego `-lgmp` w Waszych `Makefile`'ach). Analogicznie, jeśli wybrałeś `cmake` użyj `find_package` do znalezienia opcji kompilacji. Uwaga, to będzie trudniejsze, ale i satysfakcja większa. Program wynikowy ma się nazywać `calc`. Wskazówki: 1. `man 1 pkg-config` 1. https://gmplib.org/ 1. nie ma potrzeby ręcznego kompilacji/instalowania `gmp`. Ta biblioteka jest już dostępna na `boss`ie (jak i na każdym sensownym komputerze) :wq