Buduję zestaw modułów jądra Linux przy użyciu współdzielonego kodu źródłowego. Z tego co rozumiem, plik Makefile musi być nazwany "Makefile", więc muszę użyć tego samego Makefile do zbudowania dwóch różnych modułów. Jak mogę zbudować dwa różne moduły w obrębie tego samego pliku Makefile z tym samym kodem źródłowym, ale z dwiema różnymi opcjami kompilacji?Z modułów jądra drzewa: Wiele modułów, pojedynczy plik Makefile, ten sam plik źródłowy, różne opcje kompilacji
Na przykład moje moduły nazywane są moduł1 i moduł2. Więc mam następujący wiersz, aby je określić:
obj-m := module1.o module2.o
wśród innych plików, zarówno Module1 i module2 trzeba użyć tego samego pliku źródłowego code.c
, ale zbudowany z różnymi opcjami kompilacji. Tak mówią na przykład, Makefile zawiera następujące wiersze:
module1-objs = module1_code.o other_code.o
module2-objs = module2_code.o other_code.o
Chcę module1_code.o
i module2_code.o
być zbudowany z code.c, ale z różnymi opcjami. W szczególności chcę jeden module1_code.o
z makro zdefiniowane -DPREPROCEFFOR_FLAG=1
i module2_code.o
zbudowany bez makra.
Z tego co wiem, system plików Makefile używanych w systemie Linux domyślnie sugeruje, że dla pliku obiektowego o nazwie "code.o" plik źródłowy nazywa się "code.c", więc jak mógłbym to osiągnąć? Czy to możliwe? Czy jest lepszy sposób to zrobić?
Możesz nazwać swój plik Makefile, jak tylko chcesz. make jednak domyślnie szuka tylko [niektórych nazw plików] (http://www.gnu.org/software/make/manual/make.html#Makefile-Arguments). W przypadku innych nazw należy użyć argumentu '-f'. –
Jeśli podasz konkretną regułę dla pliku obiektowego z warunkiem wstępnym odpowiedniego pliku źródłowego, a reguły dotyczące budowania marki docelowej będą używać tej zamiast domyślnej reguły, o której wspomniałeś. Więc 'module1_code.o: code.c; '. –