如何编译交叉引用文件?

时间:2014-02-28 04:53:01

标签: linux gcc compilation makefile

我有六个文件,他们都参考了其他文件,如何在linux下编译它们?如何写make文件?

  1. FileA.h
    FileA.cpp
    定义main()和f(),它也引用b()

  2. FileB.h。
    FileB.cpp
    定义b(),并引用c()

  3. FileC.h
    FileC.cpp
    定义c()和对f()的引用

2 个答案:

答案 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 *~