Prior to asking I had saw this, tried but didn't help : conditional compliation based on variable into makefile
In my case my src_file.c
contains:
#ifndef WITH_ATS
#define WITH_ATS
#include "ats.h"
#endif
And Makefile has:
ifdef WITH_ATS
INCLUDEDIR += -I../at2_build/include/
LDFLAGS += -L$(AT2) -lat2 -Wl,-rpath=$(AT2)
CFLAGS += -DWITH_ATS
endif
What I am trying is, if I do make WITH_ATS=1
file should compile with compiled ats
lib,
whereas if do make WITH_ATS=0
compilation should be without ats
lib.
Any help will be appreciated.
The variable WITH_ATS
is not empty when running make WITH_ATS=0
, and therefore ifdef WITH_ATS
in the makefile evaluates to true (i.e., not what you expect).
What you actually need is to check whether WITH_ATS
is equal to 1
. This can be achieved by means of ifeq
:
ifeq ($(WITH_ATS),1)
INCLUDEDIR += -I../at2_build/include/
LDFLAGS += -L$(AT2) -lat2 -Wl,-rpath=$(AT2)
CFLAGS += -DWITH_ATS
endif
In your src_file.c
you need neither #ifndef
nor #define
. What you are implementing that way is an include guard, which is not what you want, what you actually need is:
#ifdef WITH_ATS
#include "ats.h"
#endif
That is, to include ats.h
if WITH_ATS
is defined.
Note that, in your C source file, WITH_ATS
is just an empty macro (i.e., it doesn't have any value associated), whereas in your makefile, WITH_ATS
is a variable that takes the value passed at the command line, e.g., 0
for make WITH_ATS=0
.
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