• makefile工具


    目的:
    GNU make来构建和管理自己的软件工程。
    GNU的make能够使整个软件工程的编译、链接只需要一个命令就可完成。

    说明:
    make在执行时,需要一个名为Makefile的文件。Makefile文件描述了整个
    工程的编译、链接等规则。
    包括:哪些源文件需要编译及如何编译;需要创建哪些库文件及怎样创建、
    如何得到最后我们想要的可执行文件。

    Makefile术语:
    规则:用于说明如何生成一个或多个目标文件,规则如下:
    targets : prerequisites
    command
    目标 依赖 命令
    main.o : main.c
    gcc -c main.c
    ******命令需要以【TAB】键开始*******

    目标:
    在Makefile中,只应该有一个最终目标,其它的目标都是被这个目标所连带
    出来的,Makefile中第一条规则中的目标将被确立为最终的目标。

    文件名:
    make命令默认在当前目录下寻找名为makefile或Makefile的工程文件,
    当名字不是这两个之一时,用:make -f 文件名。

    伪目标:
    Makefile中把那些没有任何依赖只有执行动作的目标成为“伪目标”。
    (phony targets)。

    .PHONY : clean
    clean :
    rm -f hello main.o

    “.PHONY”将“clean”目标声明为伪目标。

    变量:
    一般依赖写法:
    obj=main.o func1.o func2.o func3.o
    hello : $(obj)
    gcc $(obj) -o hello

    在makefile中,存在系统默认的自动化变量:
    *** $^ 代表所有的依赖文件
    *** $@ 代表目标
    *** $< 代表第一个依赖文件

    如:
    hello : main.o func1.o func2.o
    gcc main.o func1.o func2.o -o hello
    写为:
    hello : main.o func1.o func2.o
    gcc $^ -o $@

    其它:
    makefile中“#”后的内容为注释;

    示例:
    有两个.c文件和一个.h文件:

    fun.c文件如下:
    #include "fun.h"

    int max_fun(int x, int y)
    {
    if(x >= y)
    return x;
    else
    return y;
    }

    main.c文件如下:
    #include "fun.h"
    int main(void)
    {
    int a, b;
    printf("Please enter the number a and b ");
    scanf("%d%d", &a, &b);
    int max = 0;
    max = max_fun(a, b);
    printf("The max number is %d ", max);
    return 0;
    }

    fun.h文件如下:
    #include <stdio.h>
    extern int max_fun(int x, int y);

    第一版makefile,即简单直观,但当文件很多时,修改困难:
    main : main.o fun.o
    gcc main.o fun.o -o main
    main.o : main.c fun.h
    gcc -c main.c -o main.o
    fun.o : fun.c fun.h
    gcc -c fun.c -o fun.o
    clean:
    rm -f main *.o

    第二版makefile,使用变量替换:
    OBJS=main.o fun.o
    CC=gcc
    CFLAGS=-c
    main : $(OBJS)
    $(CC) $(OBJS) -o main
    main.o : main.c fun.h
    $(CC) $(CFLAGS) main.c -o main.o
    fun.o : fun.c fun.h
    $(CC) $(CFLAGS) fun.c -o fun.o
    clean:
    rm -f main *.o

    第三版makefile,使用自动变量替换:
    OBJS=main.o fun.o
    CC=gcc
    CFLAGS=-c
    main : $(OBJS)
    $(CC) $^ -o $@
    main.o : main.c fun.h
    $(CC) $(CFLAGS) $< -o $@
    fun.o : fun.c fun.h
    $(CC) $(CFLAGS) $< -o $@
    clean:
    rm -f main *.o

    第四版makefile,使用隐式规则写法:
    OBJS=main.o fun.o
    CC=gcc
    CFLAGS=-c
    main : $(OBJS)
    $(CC) $^ -o $@
    clean:
    rm -f main *.o

    第五版makefile,使用模式规则写法:
    OBJS=main.o fun.o
    CC=gcc
    CFLAGS=-c
    main : $(OBJS)
    $(CC) $^ -o $@
    %.o : %.c
    $(CC) $(CFLAGS) $< -o $@
    clean:
    rm -f main *.o

  • 相关阅读:
    9.12 其他样式;JS
    9.11 样式表
    9.9 样式表
    PHP延迟几秒后执行,PHP延迟执行,PHP停顿几毫秒后执行 usleep() 和 sleep()
    PHP 去除url参数中出现+、空格、=、%、&、#等字符的解决办法, PHP去除影响url路径的字符
    java第一堂课-常用的电脑快捷键操作和重要的dos命令
    常用第三方接口,支付宝支付,微信支付,软著,IOS开发者账号
    苹果开发者账号申请流程完整版 https://www.jianshu.com/p/655380201685
    thinkphp 去重查询
    将数据导【入】【excel表】格式 前端页面
  • 原文地址:https://www.cnblogs.com/paladinzxl/p/4828991.html
Copyright © 2020-2023  润新知