[Makefile] Converitre file annidati in unica cartella

  • 3 Risposte
  • 13270 Visite

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline hitech95

  • Membro Giovane
  • **
  • 71
  • Sesso: Maschio
    • GreenTea
Ciao,
sono poco ferrato co i makefile.

Sto sviluppando un driver linux ma ho diversi problemi nel realizzare il makefile.
Questo è quello che ho fatto, ma (ovviamente) non funziona.  :headbang:


Codice: [Seleziona]
CONFIG_MODULE_SIG=n
 
CFILES:=  $(notdir $(wildcard $M/src/mylib/.*c))                     \
         $(notdir $(wildcard $M/src/mylib/device_drivers/chip1/.*c))    \
         $(notdir $(wildcard $M/src/mylib/device_drivers/chip2/.*c))    \
         $(notdir $(wildcard $M/src/mylib/device_drivers/chip3/.*c))    \
         $(notdir $(wildcard $M/src/mylib/device_drivers/chip4/.*c))    \
 
OBJS := $(CFILES:.c=.o)
KSRC := /lib/modules/$(shell uname -r)/build
 
obj-m += mylib_api.o
proslic_api-y := $(OBJS)
 
all:
    $(MAKE) -C $(KSRC) M=$(PWD) modules
 
clean:
    $(MAKE) -C $(KSRC) M=$(PWD) clean
 
.PHONY: clean

Vi spiego un com'è fatta la struttura del progetto:

Codice: [Seleziona]
basedir:
|- Makefile
|- src
    |- main.c
    |- main.h
    |- vendor_lib
        |- Makefile (Questo è il makefile che mi sta dando diverse noie)
        |- lots_of_files.h
        |- lots_of_files.c
        |- vendor_subdir
            |- vendror_subdir_nested
                |- vendror_subdir_file.h
                |- vendror_subdir_file.c

Il problema si presenta quando nei file lots_of_files.c vengono importati dei file .h che sono in realtà nelle cartelle sottostanti. ( Senza il percorso, #include "example.h", example.h è sotto ./vendor_subdir/vendror_subdir_nested/example.h)

L'idea è quella di copiare tutti i file della vendor lib in una unica cartella "build" da cui poi compilare i vari file con la wildcard.
Essendo la libreria di terze parti vorrei evitare il più possibile di modificare il codice visto che effettua un sacco di operazioni abbastanza sconoscute.

Se qualcuno ha qualche suggerimento, è ben accetto.
« Ultima modifica: 06 Maggio 2019, 23:50 da hitech95 »
i7 4790k @4400mhz | Asus Rog VII Hero | HyperX Beast DDR3 @2400mhz CL11 16GB | Corsair 850W | XFX HD6870 @1000mhz | Cooler Master 690 II Advanced | Artic Freezer 7 PRO | Samsung 850 EVO | Windows 8.1 Pro
Acer C720P - Xubuntu
i5 750 @3800mhz | Asus P7P55D Deluxe | G.Skill ECO DDR3 @2000mhz CL9 4GB
HP Microserver N54L | 4GB | 1x2TB WD Green | Intel SSD 40GB
WNDR3700 | AGPF | AGA | HG553 | W8970 | DGN3500 (All OpenWrt based)
Raspberry PI B Rev.2 | Rasperry Pi 2 | Camera No-IR

Offline DoRaeMoN

  • Nuovo Iscritto
  • *
  • 38
Re:[Makefile] Converitre file annidati in unica cartella
« Risposta #1 il: 07 Maggio 2019, 03:28 »
ti consiglio di modificare il makefile appendendo -I<percorso_da_includere> che è la soluzione standard a questo tipo di problema
ti faccio un esempio

Codice: [Seleziona]
CONFIG_MODULE_SIG=n

ccflags-y :=  -Isrc/vendor_libs/ -Isrc/vendor_libs/vendor_subdir/ -I...

CFILES:=  $(notdir $(wildcard $M/src/mylib/.*c))                     \
         $(notdir $(wildcard $M/src/mylib/device_drivers/chip1/.*c))    \
         $(notdir $(wildcard $M/src/mylib/device_drivers/chip2/.*c))    \
         $(notdir $(wildcard $M/src/mylib/device_drivers/chip3/.*c))    \
         $(notdir $(wildcard $M/src/mylib/device_drivers/chip4/.*c))    \
 
OBJS := $(CFILES:.c=.o)
KSRC := /lib/modules/$(shell uname -r)/build
 
obj-m += mylib_api.o
proslic_api-y := $(OBJS)
 
all:
    $(MAKE) -C $(KSRC) M=$(PWD) modules
 
clean:
    $(MAKE) -C $(KSRC) M=$(PWD) clean
 
.PHONY: clean

ovviamente metti solo le include dir necessarie, che non saranno tutte le sottocartelle

EDIT: in base alla versione del kernel che stai compilando, è possibile che la variabile non sia "ccflags-y" ma "EXTRA_CFLAGS" (che è deprecata ma dovrebbe funzionare tuttora)

Offline hitech95

  • Membro Giovane
  • **
  • 71
  • Sesso: Maschio
    • GreenTea
Re:[Makefile] Converitre file annidati in unica cartella
« Risposta #2 il: 07 Maggio 2019, 18:35 »
Purtroppo anche la wildcard non funziona.
Non sono proprio in grado di comprendere questi makefile...
 :facepalm:
i7 4790k @4400mhz | Asus Rog VII Hero | HyperX Beast DDR3 @2400mhz CL11 16GB | Corsair 850W | XFX HD6870 @1000mhz | Cooler Master 690 II Advanced | Artic Freezer 7 PRO | Samsung 850 EVO | Windows 8.1 Pro
Acer C720P - Xubuntu
i5 750 @3800mhz | Asus P7P55D Deluxe | G.Skill ECO DDR3 @2000mhz CL9 4GB
HP Microserver N54L | 4GB | 1x2TB WD Green | Intel SSD 40GB
WNDR3700 | AGPF | AGA | HG553 | W8970 | DGN3500 (All OpenWrt based)
Raspberry PI B Rev.2 | Rasperry Pi 2 | Camera No-IR

Offline DoRaeMoN

  • Nuovo Iscritto
  • *
  • 38
Re:[Makefile] Converitre file annidati in unica cartella
« Risposta #3 il: 09 Maggio 2019, 21:59 »
quello che ti consiglio è di mettere i file .c con il loro persorso relativo nel makefile. puoi usare "find ." per avere una lista ricorsiva dei file, la formatti un attimo e la metti nel makefile