KLone – Jak korzystać z plików .c i .cpp znajdujących się poza folderem www?

Spis treści

 

Przypuśćmy, że mamy kilka plików .cpp wraz z nagłówkami .h które chcielibyśmy wykorzystać w naszym projekcie Klone.

1. Te pliki powinny być pozbawione funkcji int main()
2. W plikach .cpp trzymane są tylko zdefiniowane przez nas funkcje. Poza tym możemy w takich plikach dołączać pliki nagłówkowe, przestrzenie nazw, itp. itd. zgodnie ze specyfikacją C/C++ dla systemów uniksopodobnych. 
3. Przykłady KLone swoje nagłówki .h trzymają w folderze include a nie w tym samym folderze co pliki .c i .cpp – przedstawię wersję z folderem include oraz wersję, gdzie pliki .h i .cpp są trzymane razem.

 

A. Wersja z folderem include

Nasz przykład oprzemy o funkcje które pozwalają na kodowanie i odkodowanie danych za pomocą base64. Te funkcje wykorzystamy w pliku .klx, który dla KLone jest plikiem C++.

1. Tworzymy w folderze KLone folder gdzie będziemy trzymać pliki .cpp – ja nazwałem encode_base64
2. Wchodzimy do tego folderu i tworzymy sobie / kopiujemy pliki .cpp. Ja utworzyłem jeden plik o nazwie base64.cpp

 

base64.cpp

 

Ważne jest poprawne załączenie #include <base64/base64.h> co mówi, że nagłówek base64.h znajduje się w katalogu głównym/include [ na podstawie flagi w Makefile ] /base64

3. W folderze encode_base64 tworzymy plik Makefile z poniższą zawartością [ ten plik będzie używany później przez polecenie make ]

 

Makefile

gdzie:
LIB – podajemy wymyśloną przez siebie nazwę biblioteki
SRCS – podajemy wszystkie pliki .c .cpp .cxx znajdujące się w folderze. Pliki oddzielamy od siebie spacjami
CFLAGS – flagi dla kompilatora. Tutaj informujemy, że nagłówki .h znajdują się w folderze include w głównym folderze /opt/klone

 

4. Tworzymy folder include a następnie w nim tworzymy folder base64. W folderze base64 tworzymy odpowiedni plik nagłówkowy .h o nazwie base64.h

5. Musimy zmodyfikować plik Makefile w katalogu głównym KLone. Musimy poinformować o naszych plikach .cpp i .c

dodajemy:
a) SUBDIR += $(CURDIR)/encode_base64 – informujemy gdzie są nasze pliki .cpp katalog_bieżący/encode_base64
b) WEBAPP_CFLAGS += -I$(CURDIR)/include – informujemy, gdzie są pliki nagłówkowe katalog_bieżący/include
c) WEBAPP_LDADD += $(CURDIR)/encode_base64/libbase64.a – informujemy, gdzie znajduje się i jak się nazywa statyczna biblioteka z rozszerzeniem .a – katalog_bieżący/encode_base64/libbase64.a . Nazwę końcową biblioteki tworzy się przez scalenie: lib + nazwa zmiennej LIB z pliku Makefile z folderu encode_base64 + rozszerzenie .a

 

Makefile – po modyfikacji nr 1

6. Tworzy plik base64.klx w folderze webapp/www. To w nim wykorzystamy nasze funkcje base64 z pliku .cpp

W linii 2 załączamy plik nagłówkowy z include/base64. Dalej przypisujemy nasz tekst do zmiennej text, w kolejnych zmiennych kodujemy i dekodujemy dane, a następnie je wyświetlamy.

 

Poniżej krótkie przedstawienie listy plików i folderów utworzonych przez nas:
|
|-encode_base64
|        |-base64.cpp
|        |-Makefile
|
|-include
|    |-base64
|        |-base64.h
|
|-Makefile [ modyfikacja ]
|
|-webapp
|    |-www
|        |-base64.klx
|
|

 

Efekty działania:

 

B. Pliki .cpp, .c, .cxx, .h są w jednym folderze

Druga opcja to dodanie własnych plików gdy są one w jednym folderze.
Zrobię to na innym przykładzie. 
Kolejne punkty są podobne do tych z drogi A.

1. Tworzymy w folderze KLone folder gdzie będziemy trzymać pliki .cpp – ja nazwałem library1
2. Wchodzimy do tego folderu i tworzymy sobie / kopiujemy pliki .cpp, .c, .cxx, .h. 

 

moj.cpp

Zwracamy uwagę na #include <library1/moj.h> gdzie podajemy nazwę folderu w którym znajdujemy się + plik nagłówkowy

 

moj.h

3. W folderze library1 tworzymy plik Makefile z poniższą zawartością [ ten plik będzie używany później przez polecenie make ]

 

Makefile

gdzie:
LIB – podajemy wymyśloną przez siebie nazwę biblioteki
SRCS – podajemy wszystkie pliki .c .cpp .cxx znajdujące się w folderze. Pliki oddzielamy od siebie spacjami
CFLAGS – flagi dla kompilatora. Tutaj informujemy, że nagłówki .h znajdują się w tym samym folderze co pliki .cpp

4. Musimy zmodyfikować plik Makefile w katalogu głównym KLone. Musimy poinformować o naszym folderze

dodajemy:
a) SUBDIR += $(CURDIR)/library1 – informujemy gdzie są nasze pliki .cpp katalog_bieżący/library1
b) WEBAPP_CFLAGS += -I$(CURDIR)/ – informujemy, gdzie są pliki nagłówkowe, przeszukaj katalog_bieżący/
c) WEBAPP_LDADD += $(CURDIR)/library1/liblibra1.a – informujemy, gdzie znajduje się i jak się nazywa statyczna biblioteka z rozszerzeniem .a – katalog_bieżący/library1/liblibra1.a .

5. Tworzy plik lib.klx w folderze webapp/www.

W linii 2 załączamy plik nagłówkowy z library1. Dalej wykorzystujemy funkcję fhelloworld(), przypisujemy ją do zmiennej a następnie wyświetlamy.

Poniżej krótkie przedstawienie listy plików i folderów utworzonych przez nas:
|
|-library1
|    |-moj.cpp
|    |-moj.h
|    |-Makefile
|
|-Makefile [ zmodyfikowany ]
|
|-webapp
|    |-www
|        |-lib.klx

 

Oczywiście pliki mogą być pogrupowane w folderach, ale myślę, że nie powinno być problemu z poprawnym napisaniem plików Makefile i dołączeniem odpowiednich nagłówków .h