1,主Makefile,Makefile所在的目录只有main.cpp main2.cpp,及要把生成的.o文件放到./obj目录下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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))
|
本文转自 hakuyo 51CTO博客,原文链接:http://blog.51cto.com/hakuyo/1660118,如需转载请自行联系原作者