makefile 測試

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章