errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8
前言
这是一个简单地演示C语言如何使用makefile在linux下进行编译。
目录
前言
一、C语言编译
1、编写add.c文件
2、编写sub.c文件
3、编写test.h文件
4、编写makefile文件
5、执行makefile文件
6、高级一点的makefile文件写法
7、makefile模板
一、C语言编译
整个流程:
1、编写add.c文件
在命令行写入:
vi add.c
进入vi编辑模式,写入:
#include "test.h"
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int main()
{
printf(" 2 + 3 = %d\n", add(2, 3));
printf(" 2 - 3 = %d\n", sub(2, 3));
return 1;
}
按Esc键退出vi的编辑模式,进入命令行模式,再输入
:wq
即保存并退出
2、编写sub.c文件
在命令行写入:
vi sub.c
进入vi编辑模式,写入:
#include "test.h"
int sub(int a, int b)
{
return a - b;
}
按Esc键退出vi的编辑模式,进入命令行模式,再输入
:wq
即保存并退出
3、编写test.h文件
在命令行写入:
vi test.h
进入vi编辑模式,写入:
#ifndef _TEST_H
#define _TEST_H
int add(int a, int b);
int sub(int a, int b);
#endif
按Esc键退出vi的编辑模式,进入命令行模式,再输入
:wq
即保存并退出
4、编写makefile文件
在命令行写入:
vi makefile
进入vi编辑模式,写入:
test: add.o sub.o
gcc -o test add.o sub.o
add.o: add.c test.h
gcc -c add.c
sub.o: sub.c test.h
gcc -c sub.c
clean:
rm -rf test
rm -rf *.o
makefile文件
- 好处:一次编写,终身受益
- 命名规则:makefile、Makefile
- 三要素:1、目标;2、依赖;3、规则命令
- 写法:
目标:依赖 (tab键)规则命令
依赖文件如果比目标文件新,则重新生成目标
按Esc键退出vi的编辑模式,进入命令行模式,再输入
:wq
即保存并退出
5、执行makefile文件
在命令行输入:
make
会得到如下结果:
用ls命令查看一下:
我们会发现其中有一个test目标文件,我们执行下test,看下结果:
执行一下make clean,我们会发现没有了.o和test文件
6、高级一点的makefile文件写法
(1)介绍两个重要的函数:
- widcard:可以进行文件匹配
- patsubst:内容的替换
(2)使用变量的方法:$(变量)
(3)$的搭配用法:
- $@:目标
- $^:全部依赖
- $<:第一个依赖
- $?:第一个变化的依赖
SrcFiles=$(wildcard *.c) #注释:可以得到所有的.c文件
ObjFiles=$(patsubst %.c,%.o,$(SrcFiles)) #把所有的.c文件替换成.o文件
app:$(ObjFiles)
gcc -o app $^
all:$(ObjFiles) #伪目标
%.o:%.c #把每一个.c生成.o
gcc -o $@ $^
.RHONY:clean #防止有歧义
clean:
rm -f all
7、makefile模板
SrcFiles=$(wildcard *.c) #得到所有的.c文件
ObjFiles=$(patsubst %.c,%,$(SrcFiles)) #把所有的.c替换成.o文件
#格式
#目标:依赖
# 规则命令 (gcc -o 目标 依赖)
# $@:目标
# $^:全部依赖
# $<:第一个依赖
# $?:第一个变化
all:$(ObjFiles)
#使所有的.c文件分别生成对应的.o文件
%:%.c
gcc -o $@ $^
# -I./include(指定包含的头文件路径)
# -lpthread(编译线程时需要)
# -g(调试时需要)
.PHONY:clean #防止有歧义
#清理
clean:
-rm -f $(ObjFiles)
上一篇: errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8
下一篇: errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8
推荐阅读
-
errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8
-
errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8
-
errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8
-
errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8
-
errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8
-
errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8
-
errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8
-
errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8
-
errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8
-
errorsk-4nQwBFp0LP8NpyK9WwwoT3BlbkFJyH23SKdFWR1P9Sr63sF8