Linux 如何编译交叉引用文件?

Linux 如何编译交叉引用文件?,linux,gcc,compilation,makefile,Linux,Gcc,Compilation,Makefile,我有六个文件,它们都引用了其他文件,如何在linux下编译它们?如何编写make文件 文件a.h FileA.cpp 定义main()和f(),它还引用b() 文件B.h. 文件b.cpp 定义b(),并引用c() FileC.h FileC.cpp 定义c()和对f()的引用 对于这个编译,您需要简单的makefile,比如 XX = g++ CFLAGS = -g INC := -I./include TGT = ./test %.o:%.cpp $(XX) $(CFLAGS)

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

  • 文件a.h
    FileA.cpp
    定义main()和f(),它还引用b()

  • 文件B.h.
    文件b.cpp
    定义b(),并引用c()

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


  • 对于这个编译,您需要简单的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 *~
    
    XX=g++
    CFLAGS=-g
    公司:=-I/包括
    TGT=/测试
    %.o:%.cpp
    美元(XX)$(CFLAGS)$(INC)-c$<-o$@
    SOURCES=$(通配符*.c*.cpp)
    OBJS=$(patsubst%.cpp,%.o,$(源代码)))
    $(TGT):$(OBJS)
    $(XX)$(OBJS)$(INC)-o$(TGT)
    chmod 777美元(TGT)
    清洁:
    rm-rf*.o*~
    
    这个简单的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):


    以下是一个更一般的版本:

    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)
    
    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)
    
    $ 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