我有六个文件,他们都参考了其他文件,如何在linux下编译它们?如何写make文件?
FileA.h
FileA.cpp
定义main()和f(),它也引用b()
FileB.h。
FileB.cpp
定义b(),并引用c()
FileC.h
FileC.cpp
定义c()和对f()的引用
答案 0 :(得分:1)
这个简单的Makefile可以用作开头:
CXXFLAGS=-I.
all: FileA.o FileB.o FileC.o
$(CXX) -o app $^
FileA.o: FileA.cpp FileA.h
FileB.o: FileB.cpp FileB.h
FileC.o: FileC.cpp FileC.h
clean:
rm app -f *.o
测试(GNU Make 3.81):
$ make
g++ -I. -c -o FileA.o FileA.cpp
g++ -I. -c -o FileB.o FileB.cpp
g++ -I. -c -o FileC.o FileC.cpp
g++ -o app FileA.o FileB.o FileC.o
这是一个更通用的版本:
CPPFLAGS=-I.
SRCS=$(wildcard *.cpp)
OBJS=$(patsubst %.cpp,%.o,$(SRCS))
TGT=app
$(TGT): $(OBJS)
$(CXX) -o $@ $^
%.o : %.cpp %.h
$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $<
clean:
rm -f $(TGT) $(OBJS)
测试(GNU Make 3.81):
$ make
g++ -c -I. -o FileA.o FileA.cpp
g++ -c -I. -o FileB.o FileB.cpp
g++ -c -I. -o FileC.o FileC.cpp
g++ -o app FileA.o FileB.o FileC.o
$ touch FileB.h
$ make
g++ -c -I. -o FileB.o FileB.cpp
g++ -o app FileA.o FileB.o FileC.o
$ make clean
rm -f app FileA.o FileB.o FileC.o
答案 1 :(得分:0)
对于这个编译,你需要简单的makefile,如
XX = g++
CFLAGS = -g
INC := -I./include
TGT = ./test
%.o:%.cpp
$(XX) $(CFLAGS) $(INC) -c $< -o $@
SOURCES = $(wildcard *.c *.cpp)
OBJS = $(patsubst %.cpp,%.o,$(SOURCES)))
$(TGT) : $(OBJS)
$(XX) $(OBJS) $(INC) -o $(TGT)
chmod 777 $(TGT)
clean:
rm -rf *.o *~