分享

makefile 文件一步一步演变

 wusiqi111 2017-07-17

简单的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) 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多