Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

If conditions in a Makefile, inside a target

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.

like image 286
alexandernst Avatar asked Apr 12 '13 17:04

alexandernst


1 Answers

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 \)

like image 133
Omer Dagan Avatar answered Sep 22 '22 14:09

Omer Dagan