$(CC)用於編譯C程序。 $(CXX)用於編譯C++程序。同樣,$(CFLAGS)用於C程序,$(CXXFLAGS)用於編譯C++。
更改的前幾行這樣的:
#CC = g++
LOADLIBES = -lm
CXXFLAGS = -Wall -O2 -g
(但是看別人的筆記約-02和-g之間不兼容。)
獲得該行擺脫空間的括號內:
OBJS = $(SRC1:.cpp=.o)
更改main
線以這樣的:
main: $(OBJS) $(SRC2)
# Built by implicit rules
產生的makefile文件應該是這樣的:
#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
和輸出應該是這樣的:
$ 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
爲了完整,這是我使用的化妝版本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
這q uestion與C++無關,因此我刪除了[C++]標籤 –
根據Robᵩ的說法,它的確如此 –
這個問題是關於如何使用Makefile。在這個關於C++語言的問題中沒有任何東西。你碰巧使用make來構建一個用C++編寫的程序,但它用C++編寫的事實是正交的。你的代碼可能已經寫在FORTRAN中。 –