使用makefile 自定义build,run,dev等命令

发布时间 2023-07-05 00:25:51作者: MaxBruce

原文:https://www.jianshu.com/p/48494e6f45a1

首先项目里创建Makefile文件

build\:go:
    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/main main.go
run\:go:
    go run main.go
%:
    @echo 未定义该命令 $@

这样就可以执行以下命令

make build:go
make run:go

然后你不想使用make命令,想自定义的话在/usr/local/bin/{自定义名称}
假如,我想要qn build:go来执行的话创建/usr/local/bin/qn
文件内容如下:

#!/bin/bash
make "$@"%    

然后给个执行权限

chmod +x  /usr/local/bin/qn

# 然后就可以执行自定义命令了
qn build:go 

 

原文:https://blog.csdn.net/PYJTRK/article/details/122279448

前期准备
在真正使用Makefile之前,我们首先先写四个c文件和相应的h文件,分别是fun0.c,fun1.c,fun2.c,fun0.h,fun1.h,fun2.h以及main.c

//fun0.c
#include "fun0.h"
void print0(){
printf("hello world 0");
}

//fun0.h
#include <stdio.h>
void print0(void);

//fun1.c
#include "fun1.h"
void print1(){
printf("hello world 1");
}
1
2
3
4
5
//fun1.h
#include <stdio.h>
void print1(void);
1
2
3
//fun2.c
#include "fun2.h"
void print2(){
printf("hello world 2");
}

//fun2.h
#include <stdio.h>
void print2(void);

//main.c
#include "fun0.h"
#include "fun1.h"
#include "fun2.h"

int main(){
print0();
print1();
print2();
return 1;
}

如此一来我们就有了如下文件。


编写Makefile文件
接着在当前文件夹下创建名为Makefile的文件,代码如下。编写的时候一定要注意!gcc前面是一个TAB,不要输入空格,否则会出错。

这里解释一下,红色框是指目标文件,而蓝色框是指被依赖的文件,也就是说要想生成冒号左边的文件,就需要依赖冒号右边的文件。

编写完成后,在当前文件夹输入make回车即可。如果生成绿色可执行文件表示本次编译成功。输入./main 即可执行。


Makefile文件优化
在上面,我们编写了四个c文件,每个c文件都需要生成相应的.o对象文件,如果一个项目有成百上千个c文件,那么上面这种写法的代码量就非常大了。因此我们需要对代码进行一些修改。

%是通配符,ABC%DEF就是指以ABC开头,以DEF结尾字符串。重新make一下,也能得到刚刚的结果。

Makefile也可以使用变量,我们可以继续修改刚刚Makefile代码。objs是我们定义的变量,它等于 main.o fun0.o fun1.o fun2.o 这条长长的字符串。调用的方法是 ${变量名}。如此一来代码就更加简洁了。

每次make之后都会生成大量的.o文件,我们可以编写相关命令来删除这些中间文件。clear是自定义的命令,make之后,再输入make clear加回车即可清除.o文件。

————————————————
版权声明:本文为CSDN博主「PYJTLK」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/PYJTRK/article/details/122279448