Witam, muszę przyznać na wstępie, że mam poważny problem z przestawienia się z języków skryptowych do programowania w języku C. Prosiłbym o Waszą radę / refleksję odnośnie dzielenia kodu na mniejsze fragmenty (pliki). Generalnie przywykłem do inkludowania potrzebnych plików stąd linkier i "make'owanie" wydają się być nienaturalne.
Mam coś takiego w projekcie: folder library (kod, który ma być dostępny dla serwera i klienta np. jakiś typ wyliczeniowy dla pakietów - NIE JEST to biblioteka współdzielona typu so...czysty kod), server , client itd.
W wielu plikach potrzebuje mieć dostęp do niestety zmiennych globalnych, struktur, stałych, funkcji. Z funkcjami problemu nie mam, udało mi się ich deklarację wyodrębnić do plików nagłówkowych a potem poinstruować konsolidator by dołączył definicje. Zmienne też nie stanowią problemu (w plikach nagłówkowych korzystam z modyfikatora extern)...ale struktury są problemem nie mogę ich przenieść do plików nagłówkowych, ich definicja musi być w jakimś pliku źródłowym, którego nie mogę (a muszę) dołączyć do innych plików (gdzie też są wykorzystywane) - sztuczka z #ifndef w takim układzie (gdzie każdy plik jest osobno kompilowany) nie zadziała.
Wycinek z mojego Makefile
CC=gcc
CFLAGS=-g
LFLAGS=
OBJS=server.o logon.o config.o
HDIR="../library"
server: $(OBJS)
$(CC) $(LFLAGS) $^ -o $@
server.o: server.c
$(CC) $(LFLAGS) -c $< -I$(HDIR) -Ipackage
logon.o: package/logon.c
$(CC) $(LFLAGS)-c $<
config.o: ../library/config.c
$(CC) $(LFLAGS)-c $<
clean:
rm *.o
trochę namieszałem bo samemu mi się już to wymieszało..w jaki sposób dzielić i łączyć kod w C ?? Czy powinienem darować sobie make i kompilować tylko jeden plik w którym będą inkludy do plików źródłowych (bez nagłówków), a w plikach gdzie wystąpią zależności umieszczać #ifndef i ponownie inkludować pliki źródłowe, które w danym pliku są wymagane ?? trochę mi to przypomina programowanie skryptów..bez konsolidatora..