zoukankan      html  css  js  c++  java
  • 初识makefile

    Makefile的规则

      目标 : 需要的条件 (注意冒号两边有空格)

        命令  (注意前面用tab键开头)

      解释一下:

      1 目标可以是一个或多个,可以是Object File,也可以是执行文件,甚至可以是一个标签。

      2 需要的条件就是生成目标所需要的文件或目标

      3 命令就是生成目标所需要执行的脚本

      总结一下,就是说一条makefile规则规定了编译的依赖关系,也就是目标文件依赖于条件,生成规则用命令来描述。在编译时,如果需要的条件的文件比目标更新的话,就会执行生成命令来更新目标。

    下面举个简单的例子说明。如果一个工程有3个头文件,和8个C文件,我们为了完成前面所述的那三个规则,我们的Makefile应该是下面的这个样子的。

    edit : main.o kbd.o command.o display.o /
               insert.o search.o files.o utils.o
                cc -o edit main.o kbd.o command.o display.o /
                           insert.o search.o files.o utils.o
    
    main.o : main.c defs.h
                cc -c main.c
    kbd.o : kbd.c defs.h command.h
                cc -c kbd.c
    command.o : command.c defs.h command.h
                cc -c command.c
    display.o : display.c defs.h buffer.h
                cc -c display.c
    insert.o : insert.c defs.h buffer.h
                cc -c insert.c
    search.o : search.c defs.h buffer.h
                cc -c search.c
    files.o : files.c defs.h buffer.h command.h
                cc -c files.c
    utils.o : utils.c defs.h
                cc -c utils.c
    clean :
                rm edit main.o kbd.o command.o display.o /
                   insert.o search.o files.o utils.o

    以上内容摘自如何编写makefile

    下面来说说自己的总结:

      我写了三个文件:hello.c test.c test.h。内容如下:

    hello.c:

    #include <stdio.h>
    #include "test.h"
    
    void main(void)
    {
        char s[] = "Bye~";
        printf("Hello World!
    ");
        test(s);       
    }

    test.h:

    #ifndef __TEST_H_
    #define __TEST_H_
    
    #include <stdio.h>
    
    int test(char *s);
    
    #endif

    test.c:

    #include "test.h"
    
    int test(char *s)
    {
        printf("%s...
    ",s);
        return 1;
    }

    makefile如下:

    main : hello.o test.o
        gcc -o main1 hello.o test.o
    hello.o : hello.c
        gcc -c hello.c
    test.o : test.c test.h
        gcc -c test.c
    clean : 
        rm hello.o test.o

    其中,第一行的main只是一个标签,怎样写都可以。第二行的main1才是最终生成的目标文件,并且目标和依赖的位置可以互换,比如:

    gcc hello.o test.o -o main1

    如果工程中包含头文件,只需要在第一行的依赖中写出来,第二行不用写:
    test.o : test.c test.h
        gcc -c test.c

    make完了之后再make clean一下,清除临时文件。
  • 相关阅读:
    upload.go
    heartbeat.go
    delete.go
    get.go
    handler.go
    uuid.go
    kingpin_parser.go
    disk.go
    logrus_hook.go
    反连接NOT EXISTS子查询中有or 谓词连接条件SQL优化一例
  • 原文地址:https://www.cnblogs.com/christsong/p/5999569.html
Copyright © 2011-2022 走看看