Zadanie semestralne (minimake) ============================== Napisac program `build' ktory: 1. Czyta plik podany jako argument i kompiluje pliki o wymienionych w nim nazwach (traktujac je jako programy w C). 2. Jesli plik wynikowy (.o) odpowiadajacy jakiemus plikowi .c juz istnieje i jest nowszy niz .c, to zamiast kompilacji nalezy wypisac stosowny komunikat. 3. Na koniec nalezy scalic wszystkie pliki *.o do programu wykonywalnego. 4. Do kompilacji nalezy uzyc programu wyspecyfikowanego w zmiennej srodowiskowej CC, z opcjami zawartymi w zmiennej CFLAGS. Jesli zmienna CC nie jest okreslona, to przyjmujemy, ze ma watosc `gcc', jesli zmienna CFLAGS nie jest okreslona, to przyjmujemy, ze ma watosc `-c -Wall'. 5. Do scalenia nalezy uzyc programu wyspecyfikowanego w zmiennej srodowiskowej CC, z opcjami zawartymi w zmiennej LDFLAGS; jesli nie jest zdefiniowana, to przyjmujemy, ze ma wartosc `-o b.out'. 6. Uruchomieniu kazdego procesu kompilacji powinien towarzyszyc komunikat podajacy numer procesu i pelna linie wywolania. 7. Jesli ktoras z kompilacji zawiedzie nalezy wypisac stosowny komunikat, zawierajacy informacje o procesie, ktory zawiodl i kodzie stanu, ktorym sie zakonczyl. Jesli build wywolano bez opcji -k, nalezy zakonczyc dzialanie, przerywajac ewentualne inne trwajace kompilacje. 8. Jesli `build' wywolano z opcja -j program powinien kompilowac wiele plikow rownolegle. Po -j moze nastapic liczba podajaca liczbe jednoczesnie dzialajacych procesow, np. build -j 5 foo.prj nakazuje skompilowanie plikow wymienionych w pliku foo.prj uzywajac 5 rownoleglych procesow 9. Poniewaz wyjscie z rownoleglych procesow moze sie mieszac, kazda wypisywana linijke nalezy opatrzyc numerem procesu od ktorego pochodzi.