zoukankan      html  css  js  c++  java
  • Makefile

    Makefile包括以下内容:

    *需要由make工具创建的目标体(target),目标体通常是目标文件、可执行文件或是一个标签。

    *要创建的目标体所依赖的文件(dependency_file)。

    *创建每个目标体时需要运行的命令(command)

    格式:

    target:dependency_file

      command

    command前面是“Tab”符,如果没有会出错。

    例子:

    exeprogram:main.o command.o display.o insert.o search.o files.o
        gcc -o exeprogram main.o command.o display.o insert.o search.o files.o
    main.o:main.c defs.h
        gcc -c main.c -o main.o
    command.o:command.c command.h
        gcc -c command.c -o command.o
    display.o:display.c  dispaly.h
        gcc -c display.c -o display.o
    insert.o:insert.c insert.h
        gcc -c insert.c -o insert.o
    search.o:search.c search.h
        gcc -c search.c -o search.o
    files.o:files.c files.h
        gcc -c files.c -o files.o
    clean:
        rm exeprogram main.o command.o display.o insert.o search.o files.o

    想要删除可执行文件以及所有的中间目标文件,执行“make clean”即可

    Makefile变量(使用变量易维护)

    变量定义的两种方式:

    递归展开——>VAR=var

    简单扩展——>VAR: =var

    变量的使用格式为$(VAR).

    上面的例子可以改写为:

    OBJS=main.o command.o display.o insert.o search.o files.o
       
    exeprogram:$(OBJS)
        gcc -o exeprogram $(OBJS)
    main.o:main.c defs.h
        gcc -c main.c -o main.o
    command.o:command.c command.h
        gcc -c command.c -o command.o
    display.o:display.c  dispaly.h
        gcc -c display.c -o display.o
    insert.o:insert.c insert.h
        gcc -c insert.c -o insert.o
    search.o:search.c search.h
        gcc -c search.c -o search.o
    files.o:files.c files.h
        gcc -c files.c -o files.o
    clean:
        rm exeprogram $(OBJS)

    Makefile的自动变量
    $*      不包含扩展名的目标文件名称
    $+      所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
    $<      第一个依赖文件的名称
    $?       所有时间戳比目标文件晚的依赖文件,并以空格分开
    $@     目标文件的完整名称
    $^      所有不重复的依赖文件,以空格分开
    $%     如果目标是归档成员,则该变量表示目标的归档成员名称

    OBJS=main.o command.o display.o insert.o search.o files.o
    
    CC=gcc
    CFLAGS=-Wall -O -g
       
    exeprogram:$(OBJS)
        $(CC) $^ -o $@
    main.o:main.c defs.h
         (CC) $(CFLAGS) -c $< -o $@
    command.o:command.c command.h
         (CC) $(CFLAGS) -c $< -o $@
    display.o:display.c  dispaly.h
         (CC) $(CFLAGS) -c $< -o $@
    insert.o:insert.c insert.h
         (CC) $(CFLAGS) -c $< -o $@
    search.o:search.c search.h
         (CC) $(CFLAGS) -c $< -o $@
    files.o:files.c files.h
         (CC) $(CFLAGS) -c $< -o $@
    clean:
        rm exeprogram $(OBJS)
  • 相关阅读:
    30天敏捷生活(4): 撰写个人使命宣言
    [智力考题]比尔盖茨只有3分的考题
    推荐下载:MSN机器人源代码(C#),含自动IP地址查询、简单自动问答等(添加详细使用)
    [代码]包括所有特性的目录选择对话框
    开源数据库系统之SQLite3.2.0、FireBird2.0 Alpha1等
    [建议]添加模板功能
    到底SQLite有多强?在我的2台机器上的压力测试
    OMEA Pro,刚刚荣获15届Jolt大奖,综合RSS阅读,邮件、任务等管理的IIM(智能信息管理)
    关于DotNetNuke(DNN)的语言问题
    写你自己的反编译/混淆器
  • 原文地址:https://www.cnblogs.com/itsad/p/7881737.html
Copyright © 2011-2022 走看看