Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing parameter to Makefile to change compiled code

I'm new to make. I am working on a C++ shared library, and I want it to have the option to compile with or without support for a certain feature (block of code). In other words, how do I enable the user to choose whether or not to compile the library with that feature by (maybe) passing a parameter to the make command?

For example, I need the user to be able to do this:

make --with-feature-x  

How do I do this? Do I need to write a configure file for example? Or can I do this directly within my Makefile?

like image 617
yelsayed Avatar asked Aug 02 '13 23:08

yelsayed


1 Answers

I believe the following way should work. You define an environment variable when running make. In the Makefile, you check the status of the environment variable. Depending on the status, you define the options that will be passed to g++ when compiling the code. g++ Uses the options in the preprocessing phase to decide what to include in the file (e.g. source.cpp).

The command

make FEATURE=1

Makefile

ifeq ($(FEATURE), 1)  #at this point, the makefile checks if FEATURE is enabled
OPTS = -DINCLUDE_FEATURE #variable passed to g++
endif

object:
  g++ $(OPTS) source.cpp -o executable //OPTS may contain -DINCLUDE_FEATURE

source.cpp

#ifdef INCLUDE_FEATURE 
#include feature.h

//functions that get compiled when feature is enabled
void FeatureFunction1() {
 //blah
}

void FeatureFunction2() {
 //blah
}

#endif

To check if FEATURE is passed in or not (as any value):

ifdef FEATURE
  #do something based on it
else
  # feature is not defined. Maybe set it to default value
  FEATURE=0
endif
like image 163
maditya Avatar answered Sep 23 '22 18:09

maditya