欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

makefile语法

程序员文章站 2022-07-12 11:37:44
...
target ... : prerequisites ...
	command
	...
	...

#e.g.
cc = gcc
prom = calc
deps = calc.h
obj = main.o getch.o getop.o stack.o
$(prom): $(obj)
    $(cc) -o $(prom) \
	$(obj)

main.o: main.c $(deps)
    $(cc) -c main.c

...
clean:
    #rm -rf /*	#hhh

\ : 换行符
target: 一个object file(目标文件),也可以是一个执行文件,被认为是这条语句所要处理的对象。
prerequisites: 依赖关系表,要生成那个target所需要的文件或是目标。这些文件只要有一个发生了变化,就会触发该语句的command。
command: make需要执行的命令。(任意的shell命令)

在第二行的command命令之前必须要有一个tab缩进。语法规定Makefile中的任何命令之前都必须要有一个tab缩进,否则make就会报错。

make 会比较targets文件和prerequisites文件的修改日期,如果prerequisites文件的日期要比targets文件的日期要新,或者target不存在的话,那么,make就会先执行后续定义的命令。
而对于clean,没有被第一个目标文件直接或间接关联(无prerequisites),那么它后面所定义的命令将不会被自动执行

# e.g
HttpServer: HttpServer.o Socket.o EventLoopThreadPool.o EventLoopThread.o
	g++ -std=c++11 -pthread -o HttpServer HttpServer.o Socket.o EventLoopThreadPool.o EventLoopThread.o

HttpServer.o: HttpServer.cpp Socket.h EventLoopThreadPool.h EventLoopThread.h EventLoop.h
	g++ -std=c++11 -c -pthread HttpServer.cpp EventLoopThreadPool.cpp EventLoopThread.cpp EventLoop.cpp

Socket.o: Socket.cpp Socket.h 
	g++ -std=c++11 -c -pthread Socket.cpp

EventLoopThreadPool.o: EventLoopThreadPool.cpp EventLoopThread.h 
	g++ -std=c++11 -c -pthread EventLoopThreadPool.cpp EventLoopThread.cpp

EventLoopThread.o: EventLoopThread.cpp EventLoopThread.h EventLoop.h Thread.h 
	g++ -std=c++11 -c -pthread EventLoopThread.cpp EventLoop.cpp Thread.cpp

clean:
	rm *.o HttpServer

https://blog.csdn.net/weixin_38391755/article/details/80380786

相关标签: linux makefile