J'essaie de configurer un Makefile qui va chercher et copier certains fichiers (condition if-else) et je n'arrive pas à trouver ce qui ne va pas exactement ? (mais je suis presque sûr que c'est à cause d'une combinaison d'espaces/tabulations écrits au mauvais endroit). Puis-je obtenir de l'aide à ce sujet, s'il vous plaît ?
Voici ce que j'ai actuellement :
obj-m = linuxmon.o
KDIR = /lib/modules/$(shell uname -r)/build
UNAME := $(shell uname -m)
all:
$(info Checking if custom header is needed)
ifeq ($(UNAME), x86_64)
$(info Yes)
F1_EXISTS=$(shell [ -e /usr/include/asm/unistd_32.h ] && echo 1 || echo 0 )
ifeq ($(F1_EXISTS), 1)
$(info Copying custom header)
$(shell sed -e 's/__NR_/__NR32_/g' /usr/include/asm/unistd_32.h > unistd_32.h)
else
F2_EXISTS=$(shell [[ -e /usr/include/asm-i386/unistd.h ]] && echo 1 || echo 0 )
ifeq ($(F2_EXISTS), 1)
$(info Copying custom header)
$(shell sed -e 's/__NR_/__NR32_/g' /usr/include/asm-i386/unistd.h > unistd_32.h)
else
$(error asm/unistd_32.h and asm-386/unistd.h does not exist)
endif
endif
$(info No)
endif
@make -C $(KDIR) M=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) clean
rm unistd_32.h
Quoi qu'il en soit, ça imprimera "Oui", "Copying header" deux fois et ensuite ça s'arrêtera en disant que sed ne peut pas lire /usr/include/asm-i386/unistd.h
(qu'il ne peut évidemment pas lire car je suis sur un système x64). Je pourrais dire que make
ne comprend pas les if/else et préfère tout exécuter ligne par ligne.