简单的makefile文件 Start: g++ -o main.o -c main.cpp g++ -o a.o -c a.cpp g++ -o myapp a.o main.o Clean: rm -rf main.o a.o ————————————— 用变量代替g++ CC=g++ Start: $(CC) -o main.o -c main.cpp $(CC) -o a.o -c a.cpp $(CC) -o myapp a.o main.o Clean: rm -rf main.o a.o ——————————————— makefile进一步演变1 CC=g++ Start: a.o main.o $(CC) -o myapp a.o main.o a.o: $(CC) -o a.o -c a.cpp Main.o: $(CC) -o main.o -c main.cpp Clean: rm -rf main.o a.o ——————————————— makefile进一步演变2 CC=g++ Start: a.o main.o $(CC) -o myapp a.o main.o .cpp.o://表示.o 是基于.cpp 生成的 $(CC) -o $@ -c $< //$@ 是o $< 是cpp Clean: rm -rf main.o a.o ———————————————— makefile进一步演变3 CC=g++ SRCS=main.app\ a.cpp OBJS=main.o\ a.o Start: $(OBJS) $(CC) -o myapp $(OBJS) .cpp.o://表示.o 是基于.cpp 生成的 $(CC) -o $@ -c $< //$@ 是o $< 是cpp Clean: rm -rf $(OBJS) ————————————— makefile进一步演变4 CC=g++ SRCS=main.app\ a.cpp OBJS=main.o\ a.o EXEC=myapp Start: $(OBJS) $(CC) -o $(EXEC) $(OBJS) .cpp.o: $(CC) -o $@ -c $< Clean: rm -rf $(OBJS) ——————————————— 以下是最完美的makefile 文件 CC=g++ SRCS=main.app\ a.cpp OBJS=$(SRCS:.cpp=.o) //将SRCS里面的.cpp 换成.o的 EXEC=myapp Start: $(OBJS) $(CC) -o $(EXEC) $(OBJS) .cpp.o: $(CC) -o $@ -c $< Clean: rm -rf $(OBJS) —————————————— 以下是在makefile文件增加宏开关 CC=g++ SRCS=main.app\ a.cpp OBJS=$(SRCS:.cpp=.o) //将SRCS里面的.cpp 换成.o的 EXEC=myapp Start: $(OBJS) $(CC) -o $(EXEC) $(OBJS) .cpp.o: $(CC) -o $@ -c $< -DMYLINUK //-DMYLINUK 定义MYLINUK宏 Clean: rm -rf $(OBJS) ++++++++++++++++++++++++++++= 如下是编译库文件的makefile CC=gcc SRCS=mylib.c OBJS=$(SRCS:.c=.o) //将SRCS里面的.cpp 换成.o的 EXEC=libmylib.so Start: $(OBJS) $(CC) -o $(EXEC) $(OBJS) -shared//-shared 动态库连接 .c.o: $(CC) -o $@ -c $< -DMYLINUK -fPIC//-fPIC和位子无关的代码就是没有偏移地址 Clean: rm -rf $(OBJS) ———————————————————— 如下调用动态库 CC=gcc SRCS=main.c OBJS=$(SRCS:.c=.o) //将SRCS里面的.cpp 换成.o的 EXEC=myapp Start: $(OBJS) $(CC) -o $(EXEC) $(OBJS) -L. -lmylib//-L动态库连接.是当前目录的意思, -lmylib链接my lib .c.o: $(CC) -o $@ -c $< Clean: rm -rf $(OBJS) |
|
来自: wusiqi111 > 《makefile》