Makefile 的学习

一,makefile是linux上的编译的工具

源码: makefile是根据时间来判断文件是否更新了, 如果更新了就是编译它

makefile的编写:依据是 目标 -> 依赖->命令 三步骤

二,简单的编写makefile的几个步骤

#    目标:依赖
#    (tab) 命令
#==================makefile 编写方法一:===========================
main:main.c fun1.c fun2.c sum.c
    gcc -o main main.c fun1.c fun2.c sum.c -I./


#===================makefile 编写方法二:==========================

#目标文件:依赖.o文件
main:main.o fun1.o fun2.o sum.o
    gcc main.o fun1.o fun2.o sum.o -o main

#依赖.o文件:检测文件的时间差  头文件的依赖文件
main.o:main.c
    gcc -c main.c -o main.o -I./

fun1.o:fun2.c
    gcc -c fun1.c -o fun1.o 
fun2.o:fun2.c
    gcc -c fun2.c -o fun2.o

sum.o:sum.c
    gcc -c sum.c -o sum.o


#========================makefile  方法三:=======================
#变量使用
target = main
object = main.o fun1.o fun2.o sum.o

CC = gcc
#头文件
CPPFLAGS = -I./

#生成可执行文件 $@
$(target):$(object)
    $(CC) -o $@  $^

#依赖文件检测  **模式匹配**
%.o:%.c
    $(CC) -o $@ -g -c $<  $(CPPFLAGS) 



#========================makefile   方法四:======================

#函数的使用
#源文件.c
src = $(wildcard ./*c)
obj = $(patsubst %.c, %.o, $(src))

#生成文件名
target = main
CC = gcc
#头文件
CPPFLAGS = -I./
#生成可执行文件
$(target):$(obj)
    gcc -o $@  $^
#模式匹配
%.o:%.c
    gcc -o $@ -c $< $(CPPFLAGS) 

#=========================makefile 方法⑤=========================

#加clean
#找到所有的.c文件
src = $(wildcard ./*.c)
obj = $(patsubst %.c, %.o, $(src))

#生成可执行文件
target = main
CC = gcc
#头文件指明
CPPFLAGS = -I./

#生成可执行文件方法:
$(target):$(obj)
    $(CC) -o $@ $^

#模式匹配
%.o:%.c
    $(CC) -o $@ -c $< $(CPPFLAGS)

#清空二进制文件操作
.PHONY:clean
clean:
#   echo "^_^陈丽^_^王蓉^_^"
    rm -f  $(obj) 

* 运行效果图*

这里写图片描述

三,编译两个可执行文件的makefile的编写

.SUFFIXES: .c .o
CC = gcc
SRCS1 = server.c
SRCS2 = client.c
OBJS1 = $(SRCS1:.c = .o)
OBJS2 = $(SRCS2:.c = .o)

EXE1 = server
EXE2 = client

all: $(OBJS1) $(OBJS2)
    $(CC) -o $(EXE1) $(OBJS1) -Wall -g
    $(CC) -o $(EXE2) $(OBJS2) -Wall -g
    @echo '^_^ ^_^ 陈丽 ^_^ ^_^'

#模式匹配
%.c%.o:
    $(CC) -Wall -g -o $@ -c $^



#clean 清空二进制文件
clean:
    -rm -f $(OBJS)
    -rm -f core*

四,生成动态库的制作



src1 = $(wildcard ./src/*.c)
# 第一参数是第二个参数的生成文件
obj1 = $(patsubst ./src/%.c, ./obj/%.o, $(src1))

SRCS = main.c
EXE = main

target = ./lib/libsongli.so

CC = gcc

CPPINCLUDE = -I ./include

CPPlib = -L ./lib/

CPPSO = -lsongli

#主程序
ALL:$(target)
    $(CC) -o $(EXE) $(SRCS)  $(CPPINCLUDE) $(CPPlib)  $(CPPSO)

#动态库的
$(target):$(obj1)
    $(CC) -shared -o $(target)  $(obj1) 


#模式匹配
./obj/%.o :./src/%.c
    $(CC) -c $< -o $@ -fPIC $(CPPINCLUDE)

#清除工作
.PHONY:clean
clean:
    @echo "^_^songli^_^大家好^_^"
    -rm -rf $(obj1) $(EXE) $(target)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值