$ (CC) được sử dụng để biên dịch chương trình C. $ (CXX) được sử dụng để biên dịch chương trình C++. Tương tự $ (CFLAGS) được sử dụng cho các chương trình C, $ (CXXFLAGS) được sử dụng để biên dịch C++.
Thay đổi một vài dòng đầu tiên này:
#CC = g++
LOADLIBES = -lm
CXXFLAGS = -Wall -O2 -g
(Nhưng xem ghi chú của người khác về sự không tương thích giữa -O2 và -g.)
Loại bỏ các không gian bên trong dấu ngoặc đơn trong dòng này :
OBJS = $(SRC1:.cpp=.o)
Thay đổi main
dòng này:
main: $(OBJS) $(SRC2)
# Built by implicit rules
Các makefile kết quả sẽ giống như thế này:
#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
và đầu ra sẽ trông như thế này:
$ 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
Để hoàn chỉnh, đây là phiên bản thực hiện tôi đang sử dụng trên 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
Nguồn
2012-10-15 15:09:50
Điều này q uestion thực sự không có gì để làm với C + +, vì vậy tôi loại bỏ các [c + +] tag –
Theo Robᵩ nó –
Câu hỏi này là về cách sử dụng một Makefile. Không có gì trong câu hỏi này về ngôn ngữ C++. Bạn tình cờ sử dụng make để xây dựng một chương trình được viết bằng C++, nhưng thực tế là nó được viết bằng C++ là trực giao. Mã của bạn cũng có thể được viết bằng FORTRAN. –