1,主Makefile,Makefile所在的目录只有main.cpp main2.cpp,及要把生成的.o文件放到./obj目录下
SOURCES = $(filter-out main2.cpp,$(wildcard *.cpp)) #make test:make -n #如果还有其他目录下的文件,可以使用下面的方法进行添加 #SOURCES += $(wildcard ../src/*.cpp) #c/c++预定义变量 #AR=ar #CXX=g++ #CC=cc #AS=as #CPP=$(CC) -E,C程序的预编译处理器 #CFLAGS #ASFLAGS #ARFLAGS=rv #CXXFLAGS #CPPFLAGS #LDFLAGS OBJDIR = obj/ #相当于$(patsubst %.cpp,%.o,$(filter-out main2.cpp,$(wildcard *.cpp))) #相当于$(patsubst %.cpp,%.o,$(SOURCES)) OBJS = $(SOURCES:.cpp=.o) TARGET = h.out all:$(TARGET) #注意在OBJS前面不要加上OBJDIR $(TARGET):$(OBJS) #在TARGET中运行shell及多行写法 if [ ! -d $(OBJDIR) ]; then \ mkdir $(OBJDIR) ;\ fi echo $(OBJDIR) echo $(HOME) $(MAKE) -C test2 g++ $(OBJDIR)$^ -o $@ $(filter-out main2.o,%.o):%.cpp if [ ! -d $(OBJDIR) ]; then \ mkdir $(OBJDIR) ;\ fi echo $(OBJDIR) g++ -fPIC -c $< -o $(OBJDIR)$@ #test : make clean -n clean: $(MAKE) clean -C test2 -rm $(OBJDIR)$(OBJS) -rm $(TARGET)
2,从Makefile,生成的.o文件也要放到主Makefile所在的目录下的obj目录,.cpp文件:testRead.cpp,testWrite.cpp
SOURCES = $(wildcard *.cpp) #相当于$(patsubst %.cpp,%.o,$(wildcard *.cpp)) #相当于$(patsubst %.cpp,%.o,$(SOURCES)) OBJS = $(SOURCES:.cpp=.o) OBJDIR = ../obj/ TARGETDIR = ./ TARGETS = Read Write all:Read Write Read:$(filter %Read.o,$(OBJS)) echo $(OBJS) g++ $(OBJDIR)$^ -o $(TARGETDIR)$@ Write:$(filter %Write.o,$(OBJS)) echo $(OBJS) g++ $(OBJDIR)$< -o $(TARGETDIR)$@ #相当于OBJS $(OBJS):%.o:%.cpp g++ -fPIC -c $< -o $(OBJDIR)$@ clean: -rm $(addprefix $(OBJDIR),$(OBJS)) -rm $(addprefix $(TARGETDIR),$(TARGETS))
转载于:https://blog.51cto.com/hakuyo/1660118