Makefile 的基本使用

文章目录 (?) [+]

    规则

    [target] ... : [prerequistes] ...
    <tab>[command]
    	...

    target:一个目标代表一条规则,可以是一个或多个文件名;也可以是操作名称(label),也即伪目标(PHONY)。如果未使用 .PHONY 则会检查 target 文件是否存在,如果存在则不此规则;使用了则将 target 视为伪目标,在执行相应命令时不再检查同名文件是否存在。

    prerequistes:前置条件,为可选参数。参数可为生成该 target 所依赖的文件名或伪目标。作用是当有文件比 target 文件更新时执行 command。

    command:构建 target 的具体命令。必须以制表符 TAB 开头,否则会报错“Makefile:2: *** missing separator. Stop.”


    案例

    代码文件

    // server.h
    #define NAME "SERVER"
    
    // server.c
    #include <stdio.h>
    #include "server.h"
    
    int main(int argc, char const *argv[]) {
        printf("%s\n", NAME);
    
        return 0;
    }
    
    
    // client.h
    #define NAME "CLIENT"
    
    // client.c
    #include <stdio.h>
    #include "client.h"
    
    int main(int argc, char const *argv[]) {
        printf("%s\n", NAME);
    
        return 0;
    }


    Makefile

    # 变量,需要传递到子文件需要使用 export
    OBJECT=server.o client.o
    
    # 默认执行的规则
    all: clean build
    
    build: $(OBJECT)
    
    server.o: server.h server.c
    	cc -o server.o server.c
    
    client.o: client.h client.c
    	cc -o client.o client.c 
    
    # 命令前使用 - 表示忽略错误
    clean:
    	-rm -f $(OBJECT)
    
    # 命令前使用 @ 表示不显示原始命令
    help:
    	@echo "make help: this heplp"
    	@echo "make: clean & build the project"
    	@echo "make build: build the project"
    	@echo "make clean: clean the object file"
    
    # 标记伪指令,不再检查同名文件是否存在
    .PHONY: clean build


    本文标题:Makefile 的基本使用
    本文链接:https://lanseyujie.com/post/introduction-to-makefiles.html
    版权声明:本文使用「署名-非商业性使用-相同方式共享」创作共享协议,转载或使用请遵守署名协议。
    点赞 0 分享 0