• make与makefile的几个例子和(自己写一下,汗!忘记了!)总结


    共用的几个源代码文件:

    main.c 2.c 3.c

    代码依次为:

     1 #include<stdlib.h>
     2 #include "a.h"
     3 extern void function_two();
     4 extern void function_three();
     5 
     6 int main()
     7 {
     8     function_two();
     9     function_three();
    10     exit (EXIT_SUCCESS);
    11 }
    View Code
    #include "a.h"
    #include "b.h"
    
    void function_two(){}
    View Code
    #include "b.h"
    #include "c.h"
    
    void function_three(){}
    View Code

    还有三个文件:a.h b.h c.hz使用shell命令创建它们。

    touch a.h b.h c.h

    第一个版本的makefile

     1 all:myapp
     2 
     3 # Which compiler
     4 cc = gcc
     5 
     6 # Where are include files kept
     7 INCLUDE = .
     8 
     9 # Options for development
    10 CFLAGS = -g -Wall -ansi
    11 
    12 myapp: main.o 2.o 3.o
    13     $(cc) -o myapp main.o 2.o 3.o
    14 
    15 main.o: main.o a.h
    16     $(cc) -I$(INCLUDE) $(CFLAGS) -c main.c 
    17 
    18 2.o:2.c a.h b.h
    19     $(cc) -I$(INCLUDE) $(CFLAGS) -c 2.c
    20 
    21 3.o:3.c b.h c.h
    22     $(cc) -I$(INCLUDE) $(CFLAGS) -c 3.c
    View Code

    第二个版本的makefile

     1 all:myapp
     2 
     3 # Which compiler
     4 cc = gcc
     5 
     6 # Where to install
     7 INSTDIR = /usr/local/bin
     8 
     9 # Where are include files kept
    10 INCLUDE = .
    11 
    12 # Options for development
    13 CFLAGS = -g -Wall -ansi
    14 
    15 myapp: main.o 2.o 3.o
    16     $(cc) -o myapp main.o 2.o 3.o
    17 
    18 main.o: main.o a.h
    19     $(cc) -I$(INCLUDE) $(CFLAGS) -c main.c 
    20 
    21 2.o:2.c a.h b.h
    22     $(cc) -I$(INCLUDE) $(CFLAGS) -c 2.c
    23 
    24 3.o:3.c b.h c.h
    25     $(cc) -I$(INCLUDE) $(CFLAGS) -c 3.c
    26 
    27 clean:
    28     -rm main.o 2.o 3.o
    29 
    30 install: myapp
    31     @if [-d $(INSTDIR) ]; 
    32         then 
    33         cp myapp $(INSTDIR); && 
    34         chmod a+x $(INSTDIR)/myapp; && 
    35         chmod og-w $(INSTDIR) /myapp; && 
    36         echo "Installed in $(INSTDIR)";
    37     else 
    38         echo "Sorry, $(INSTDIR) does not exist";
    39     fi
    View Code

    第三个版本的makefile

    all:myapp
    
    # Which compiler
    cc = gcc
    
    # Where to install
    INSTDIR = /usr/local/bin
    
    # Where are include files kept
    INCLUDE = .
    
    # Options for development
    CFLAGS = -g -Wall -ansi
    
    myapp: main.o 2.o 3.o
        $(cc) -o myapp main.o 2.o 3.o
    
    main.o: main.o a.h
        $(cc) -I$(INCLUDE) $(CFLAGS) -c main.c 
    
    2.o:2.c a.h b.h
        $(cc) -I$(INCLUDE) $(CFLAGS) -c 2.c
    
    3.o:3.c b.h c.h
        $(cc) -I$(INCLUDE) $(CFLAGS) -c 3.c
    
    clean:
        -rm main.o 2.o 3.o
    
    install: myapp
        @if [-d $(INSTDIR) ]; 
            then 
            cp myapp $(INSTDIR); && 
            chmod a+x $(INSTDIR)/myapp; && 
            chmod og-w $(INSTDIR) /myapp; && 
            echo "Installed in $(INSTDIR)";
        else 
            echo "Sorry, $(INSTDIR) does not exist";
        fi
    View Code

    第四个版本的makefile

    all: myapp
    
    # Which compiler
    CC = gcc
    
    # Where to install
    INSTDIR = /usr/local/bin
    
    # Where are include files kept
    INCLUDE = .
    
    # Options for development
    CFLAGS = -g -Wall -ansi
    
    # Options for release
    # CFLAGS = -O -Wall -ansi
    
    # Local Libraries
    MYLIB = mylib.a
    
    myapp: main.o $(MYLIB)
        $(CC) -o myapp main.o $(MYLIB)
    
    
    $(MYLIB): $(MYLIB)(2.o) $(MYLIB)(3.o)
    main.o: main.c a.h
    2.o: 2.c a.h b.h
    3.o: 3.c b.h c.h
    
    clean:
        -rm main.o 2.o 3.o $(MYLIB)
    
    install: myapp
        @if [ -d $(INSTDIR) ]; 
        then 
            cp myapp $(INSTDIR);
            chmod a+x $(INSTDIR)/myapp;
            chmod og-w $(INSTDIR)/myapp;
            echo "Installed in $(INSTDIR)";
        else 
            echo "Sorry, $(INSTDIR) does not exist";
        fi
    View Code

     就上述例子做个总结:

      1.第一行要指定:all的对象

      2.table所在,命令所在。即所有命令均以table键开头。

      3.#键所在,注释所在。

      4.$( )所在,宏定义所在。

      5.  .  点所在,即为当前目录。

      6. -I 表示指定目录。

      7. 内置宏定义:

        $d:表示目录

    makefile文件结构:

      第一点:设定all:可执行文件名

      第二点:gcc -MM 主文件名

            输出依赖关系

      第三点:然后根据依赖关系写命令

          第一.写生成可执行文件的命令,且后面根着的是目标文件。

          第二.写生成目标文件的命令即编译函数(包括主函数)文件什么,且后面根着的是源文件

  • 相关阅读:
    Redis随记--pubsub学习
    Redis随记--HyperLogLog的代码学习02
    Redis随记--HyperLogLog的代码学习01
    Redis随记--Lazy Free特性
    Redis随记--StreamID生成
    linux 学习笔记 第一天 安装 分区 指定ip 远程链接 2021-03-04
    Oracle ebs 常用标准表
    EBS开发——经常需要修改的触发器
    查询oracle 数据库 SQL语句执行情况
    Oracle中的索引详解(整理)
  • 原文地址:https://www.cnblogs.com/orangebook/p/3433884.html
Copyright © 2020-2023  润新知