Linux下makefile文件编写

一、.C .h文件编写

本文章参考哔哩哔哩李慧琴老师的【c语言】11.如何编写Makefile文件,链接如下如何编写Makefile文件
首先makefile、Makefile的优先级不一样,使用make指令时优先编译makefile文件。
然后我们创建.c以及对应的.h文件。.h文件放函数的声明,.c放函数的实现,main.c放函数的调用。在李慧琴老师讲的例子中需要以下五个文件:

main.c tool1.c tool1.h tool2.c tool2.h

其中main.c调用 tool1、tool2中的函数。
五个文件内容如下:

tool1.h

#ifndef TOOL1_H__
#define TOOL1_H__

void tool1(void);

#endif // tool1.h

tool1.c

#include <stdio.h>
#include "tool1.h"

void tool1()
{
	printf("tool1 printf \n");
}

tool2.h

#ifndef TOOL2_H__
#define TOOL2_H__

void tool2(void);

#endif // tool2.h

tool2.c

#include <stdio.h>
#include "tool2.h"

void tool2()
{
	printf("tool2 printf \n");
}

main.c

#include <stdio.h>
#include "tool1.h"
#include "tool2.h"

int main()
{
 tool1();
 toll2();
 return0;
}

OK我们在编写好上述文件后,需要编写makefile文件,如果单纯用gcc指令操作,太过麻烦。makefile文件实质是一条条的gcc指令。

二、Makefile文件编写

1.初版makefile文件

//mytool为最终生成的可执行文件
//其依赖main.o tool1.o tool2.o这几个可执行文件
//通过一个TAB 来执行以下command生成目标文件
mytool:main.o tool1.o tool2.o
	gcc main.o tool1.o tool2.o -o mytool

//main.0需要生成的可执行文件 ,依赖于main.c	
main.o:main.c 
// -c 编译 -Wall警告 -g方便调试 -o指定可执行文件名字
	gcc main.c -c -Wall -g -o main.o  
tool1.o:tool1.c  
	gcc tool1.c -c -Wall -g -o tool1.o
tool2.o:tool2.c
	gcc tool2.c -c -Wall -g -o tool2.o
//删除指令
clean:
	rm *.o mytool -rf

写完makefile可以使用make进行编译,编译完成后生成可执行文件mytool,使用命令./mytool可以执行。

2.用变量代替重复指令
在初版makefile存在重复指令,可以将其代替。

  OBJS = main.o tool1.o tool2.o
  cc = gcc
  //+=不管前面发生什么,加上这个功能。用CFLAGS代替编译、警告、调试
  CFLAGS += -c -Wall -g  
  
  //用$()引用变量
  mytool:$(OBJS)
  	$(cc) $(OBJS) -o mytool
  	
  main.o:main.c
  	$(cc) main.c $(CFLAGS) -o main.o 
  tool1.o:tool1.c
  	$(cc) tool1.c $(CFLAGS) -o tool1.o 
  tool2.o:tool2.c
  	$(cc) tool2.c $(CFLAGS) -o tool2.o
  
  clean:
  	$(RM) *.o mytool -r  #用大写的RM代替rm以及-rf

3.简化makefile

OBJS=main.o tool1.o tool2.o
cc=gcc
CFLAGS+=-c -Wall -g

//$^ 为依赖文件 $@为生成的可执行文件
mytool:$(OBJS)
	$(cc) $^ -o $@
//%为通配符	
%.o:%.c
	$(cc) $^ $(CFLAGS) -o $@
clean:
	$(RM) *.o mytool -r

OK 结束 不对的地方大家多多指正 哈哈哈

三、补充

//SRCS = $(wildcard *.cpp) 获取当前目录下的c文件集,放在变量SRCS中
SRCS = $(wildcard *.cpp) 
//表示将对应的c文件名转化为o文件后,放在OBJS变量中
OBJS = $(patsubst %cpp, %o, $(srcs))
gcc -shared -fPIC -o 1.so 1.c 
  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值