很多时候,我们需要运行多个命令来完成一件事情
可以有两个方案:
1. 写shell脚本
1.build.sh
2.比较复杂,不通用
2.makefile
1.定义一些常规命令(build,clean等)
2.非常简单(跟编程语音无关,不受限制)
3.可以完成对项目,源码进行编译构建
基本规则:
target: dependencies command1.target:目标
1. 要生成的目标文件的名字:blockchain
2. 只是一个动作,是一个标签:clean
2. dependencies:依赖
1. 是依赖,通常是文件,完成target所需要的输入
3. command:命令
1. shell命令,一条语句一行,前面有一个
安装make命令
linux:自带的
windows:make-3.81.exe 百度云连接
安装之后,将make.exe所在的目录添加到PATH中,例如:C:\Program Files (x86)\GnuWin32\bin
在工程目录下,创建文件: makefile或者Makefile, make命令在执行时会自动寻找这两个文件。
现在写一个makefile 内容是
#编译命令 blockchain: go build -o blockchain *.go clean: rm blockchain执行: 1. make blockchain ==> 正常执行 2. make ==》会自动执行第一个标签 3. make clean ==》删除文件
.PHONY
我们遇到的问题:当执行命令时,如果在当前目录下面存在了与标签(命令)同名的文件,那么命令不会生效,不 会触发
当我在再次执行make blockchain时候出现错误(make: “blockchain”已是最新。)
u@u-ThinkPad-S2:~/goProject/src$ make blockchain make: “blockchain”已是最新。解决办法:使用.PHONY关键字,将命令写makefile中
.PHONY:blockchain clean #编译命令 blockchain: go build -o blockchain *.go clean: rm blockchain我们在进行执行make blockchain 成功了
u@u-ThinkPad-S2:~/goProject/src $ make blockchain go build -o blockchain *.go然后我们觉得两个命令可不可以一起执行
我们可以这样写
.PHONY:blockchain clean app:clean blockchain #编译命令 blockchain: go build -o blockchain *.go clean: rm blockchain直接执行make app 就可以执行多个命令
u@u-ThinkPad-S2:~/goProject/src $ make app rm blockchain go build -o blockchain *.go我们看app后面有两个 一个是clean 和blockchain
有可能出现的错误是 clean这个命令出错误了 会导致后面的命令执行
我们先删除blockchain文件
u@u-ThinkPad-S2:~/goProject/src $ make clean rm blockchain u@u-ThinkPad-S2:~/goProject/src $ make app rm blockchain rm: 无法删除'blockchain': 没有那个文件或目录 makefile:8: recipe for target 'clean' failed make: *** [clean] Error 1
这个就是错误 解决方法就改成app:blockchain clean