I'm trying to setup a Makefile that will search and copy some files (if-else condition) and I can't figure out what exactly is wrong with it? (thou I'm pretty sure it's because a combination of spaces/tabs written in the wrong place). Can I get some help with it, please?
Here's what I have currently:
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
Anyways, that'll print "Yes", "Copying header" twice and then it will quit saying that sed can't read /usr/include/asm-i386/unistd.h
(which of course it can't read as I'm on a x64 system). I could say that make
just isn't understanding the if/else and instead is running everything line by line.
You can simply use shell commands. If you want to suppress echoing the output, use the "@" sign. For example:
clean: @if [ "test" = "test" ]; then\ echo "Hello world";\ fi
Note that the closing ;
and \
at each line are necessary
(This is because make
interpret each line as a seperate command unless it ends with \
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With