$ (CC) è usato per la compilazione di programmi C. $ (CXX) è usato per compilare programmi C++. Allo stesso modo $ (CFLAGS) è usato per i programmi C, $ (CXXFLAGS) è usato per compilare C++.
Modificare le prime righe di questo:
#CC = g++
LOADLIBES = -lm
CXXFLAGS = -Wall -O2 -g
(Ma vedi note degli altri sulle incompatibilità fra -O2 e -g.)
Sbarazzarsi degli spazi all'interno delle parentesi in questa linea :
OBJS = $(SRC1:.cpp=.o)
Modificare le linee main
a questo:
main: $(OBJS) $(SRC2)
# Built by implicit rules
Il makefile risultante dovrebbe essere simile a questo:
#CC = g++
LOADLIBES = -lm
CXXFLAGS = -Wall -O2 -g
SRC1 = Agent.cpp Breeder.cpp CandidateSolution.cpp \
Cupid.cpp FateAgent.cpp Grid.cpp Reaper.cpp \
fitness.cpp
SRC2 = main.cpp
SRC = $(SRC1) $(SRC2)
OBJS = $(SRC1:.cpp=.o)
AUX = $(SRC1:.c=.h)
main: $(OBJS) $(SRC2)
# Built by implicit rules
.PHONY: clean
clean:
rm -f *.o main
e l'uscita dovrebbe essere simile a questo:
$ make
g++ -Wall -O2 -g -c -o Agent.o Agent.cpp
g++ -Wall -O2 -g -c -o Breeder.o Breeder.cpp
g++ -Wall -O2 -g -c -o CandidateSolution.o CandidateSolution.cpp
g++ -Wall -O2 -g -c -o Cupid.o Cupid.cpp
g++ -Wall -O2 -g -c -o FateAgent.o FateAgent.cpp
g++ -Wall -O2 -g -c -o Grid.o Grid.cpp
g++ -Wall -O2 -g -c -o Reaper.o Reaper.cpp
g++ -Wall -O2 -g -c -o fitness.o fitness.cpp
g++ -Wall -O2 -g main.cpp Agent.o Breeder.o CandidateSolution.o Cupid.o FateAgent.o Grid.o Reaper.o fitness.o -lm -o main
Per completezza, questa è la versione del make sto usando su Ubuntu 10.04:
$ make -v
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i486-pc-linux-gnu
fonte
2012-10-15 15:09:50
Questo q uestion non ha davvero nulla a che fare con C++, quindi ho rimosso il tag [C++] –
Secondo Robᵩ lo fa –
Questa domanda riguarda come usare un Makefile. Non c'è niente in questa domanda sul linguaggio C++. Ti capita di usare make per costruire un programma scritto in C++, ma il fatto che sia scritto in C++ è ortogonale. Il tuo codice potrebbe anche essere stato scritto in FORTRAN. –