Makefile
语法规范
<target> : <prerequisites>
[tab] <commands>
target 是一个目标,一般是一个文件,指明要构建的对象
也可以是一个操作的名字,这称为"伪目标"(phony target)。
比如 make clean 要删除一些文件,如果在当前目录中正好有个文件叫作clean
make clean 就不会执行了,就认为没有必要重新构建了。为了避免这种情况
一般明确声明clean是"伪目标":
.PHONY: clean
clean:
rm *.o temp
如果Make命令运行时没有指定目标,默认会执行Makefile文件的第一个目标。
比如Makefile 内容如下
.PHONY: install
install:
bash test.sh
执行 make 和 执行make install 都会去执行 install target
下面的配置中,构建gotofile 的前置条件是 fromfile,如果当前目录中,fromfile存在,
则 make gotofile 可以正常运行。如果fromfile 不存在则需要写一条规则,来生成fromfile
如下:
gotofile:fromfile cp fromfile gotofile fromfile: echo "11111" > fromfile
如果一次需要构建多个文件,可以使用下面的写法
gotofile 是个伪目标,只有3个前置文件,没有任何对应命令
gotofile:file1 file2 file3 file1: echo "11111" > file1 file2: echo "22222" > file2 file3: echo "22222" > file3
执行 make gotofile 就会一次性生成 file1 file2 file3
不需要要执行3次 make file1 ; make file2 ; make file3
一些语法
【1】 关闭回声
file1:
echo "11111" > file1
上面的makefile 在构建时会打印出命令,然后去执行,叫作“echoing” 回声。
[root@jinkang-centos7 make]# make
echo "11111" > file1
关闭回声
file1:
@echo "11111" > file1
【2】 变量
txt = "hello world"
test:
@echo $(txt)
#输出 hello world
调用Shell变量是 需要在$符号前,再加个$符号
test:
@echo $$SHELL
@echo $$HOME
#输出
# /bin/bash
# /root
每行命令在一个单独的shell 中执行,因此两个相关联的命令要写在一起
test:
export name="kangkang";echo $$name
或者在换行前用反斜杠转义。
test:
export name="kangkang"; \
echo $$name
【3】循环
循环demo1
list=one two three
test:
for i in $(list);do \
echo $$i; \
done
循环demo2
.PHONY: test
test:
for file in `find ./test/ -type f`;do \
echo test >> $$file; \
done
4 【make 传参】
install:
mkdir -p $(DIR)/usr/bin/
gcc helle.c -o $(DIR)/usr/bin/hello
make 时传参 make install DIR=xxx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
2017-07-14 qq上网正常浏览器上不了网