makefileテスト

1680 ワード

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