Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I switch between compilers in the makefile?

Tags:

c++

makefile

I have the following makefile:

CFLAGS=-c -Wall -std=c++11
MCFLAGS=-c -Wall -std=c++11

LDFLAGS= -shared
MLDFLAGS= 

MSOURCES=main.cpp MCC.cpp Point3D.cpp
SOURCES= mainDLL.cpp MCC.cpp Point3D.cpp

OBJECTS=$(SOURCES:.cpp=.o)
MOBJECTS=$(MSOURCES:.cpp=.o)

EXECUTABLE=h2r.dll
MEXECUTABLE=h2r

CC=i686-w64-mingw32-g++
CC=g++

all: clean $(MSOURCES) $(MEXECUTABLE)


dll: clean $(SOURCES) $(EXECUTABLE)


$(MEXECUTABLE): $(MOBJECTS)
    $(CC) $(MLDFLAGS) $(MOBJECTS) -o $@

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

clean: 
    rm *.o $(MEXECUTABLE) $(EXECUTABLE)

How can I initialize the CC with the cross compiler(CC=i686-w64-mingw32-g++) when the make dll command is emitted and how can I use the gnu compiler when the make all is emitted?

like image 658
OHLÁLÁ Avatar asked Oct 25 '25 20:10

OHLÁLÁ


1 Answers

To set a variable based on what target is being executed you can do something like:

all: CC=g++
all: clean $(MSOURCES) $(MEXECUTABLE)

dll: CC=i686-w64-mingw32-g++
dll: clean $(SOURCES) $(EXECUTABLE)
like image 156
simon Avatar answered Oct 28 '25 09:10

simon