• Makefile 文件格式


    Makefile包含 目标文件、依赖文件、可运行命令三部分。

    每部分的基本格式例如以下:

    test: prog.o  code.o

            gcc  -o  test   prog.o   code.o

            

    当中,第一行的test是目标文件。 prog.o、code.o是依赖文件

               第二行的gcc -o test prog.o code.o是可运行命令

    整个Makefile文件都是这样的格式。


    下面是一些example:

    -----------------------Makefile example 1----------------------------------

    #this line is the comment for the Makefile

    test: prog.o code.o

            gcc   prog.o  code.o  -o test

    prog.o: prog.c  prog.h  code.h

             gcc  -c  prog.c  -o  prog.o

    code.o: code.c  code.h

            gcc  -c  code.c  -o  code.o

    clean:

            rm  -f  *.o

    ----------------------------------------------------------------------------------------------


    -------------------------------example 2(包括变量)---------------------------------

    #this line is the Makefile comment

    OBJS = prog.o  code.o

    CC = gcc

    CFLAGS = -Wall -g -O

    test: ${OBJS}

            ${CC}  ${CFLAGS}  ${OBJS}  -o test

    prog.o: prog.c  prog.h  code.h

            ${CC}  ${CFLAGS}  -c prog.c  -o prog.o

    code.o: code.c  code.h

            ${CC}   ${CFLAGS}  -c code.c  -o code.o

    clean:

            rm  -f  *.o 

    ------------------------------------------------------------------------------------------------




    -------------------------------example 3(使用Makefile的隐含规则)---------------------------------

    1,假设没有对应的编译命令,则使用隐含规则,全部的 ".c文件" 编译成与它名称同样的 ".o文件"。

    2, 使用Makefile的自己主动变量。


    #this line is the Makefile comment

    OBJS = prog.o  code.o

    CC = gcc

    test: ${OBJS}

            ${CC}   -o  $@   $^

    prog.o: prog.c  prog.h  code.h             #no exec command,and will generate the prog.o

    code.o: code.c  code.h                        #no exec command,and will generate the code.o

    clean:

            rm  -f  *.o 

    ------------------------------------------------------------------------------------------------



    -----------------------------------------------------下面为我測试过的实例文件内容 :-----------------------------------------------------

    ========================== Makefile ===============

    #this line is the comment
    CC = gcc
    OBJS = my_str.o
    CFLAGS = -Wall -g -O


    program: my_main.c ${OBJS}
                   ${CC} ${CFLAGS} $^ -o $@ 
    my_str.o: my_str.c my_str.h
                   ${CC} ${CFLAGS} -c my_str.c -o my_str.o


    clean:
                   rm -f *.o

    =======================================================================


    ==========================my_main.c=======================

    #include <unistd.h>
    #include <stdlib.h>
    #include "my_str.h"

    int 
    main(int argc, const char **argv)
    {
    if(my_cmp(argv[1], argv[2]) == 0)
    write(1, "Equal ! ", sizeof("Equal ! "));
    else
    write(1, "Not Equal ! ", sizeof("Not Equal ! "));


    exit(0);
    }

    ===============================================================


    ========================my_str.c=============================

    #include "my_str.h"


    int 
    my_cmp(const char *str1, const char *str2)
    {
    if(!str1 || !str2)
    return -1;
    while(*str1 && *str2 && *str1 == *str2)
    str1++, str2++;
    return *str1 - *str2;
    }

    ==================================================================


    ===================my_str.h============================================

    #ifndef _MY_STR_H
    #define _MY_STR_H


    int my_cmp(const char *str1, const char *str2);


    #endif

    ==================================================================


  • 相关阅读:
    prometheus TSDB和外部存储系统
    Prometheus时序数据
    Prometheus简介
    Docker网络
    Ingress
    CRI和多容器运行时
    K8s容器存储接口(CSI)介绍
    EasyNVR视频广场点击视频后切换码流才能播放是什么原因?
    EasyNVR更新H265转H264模块内存增长且显示占用高如何解决?
    EasyNVR拉公网RTSP流失败问题调试和解决
  • 原文地址:https://www.cnblogs.com/llguanli/p/8391582.html
Copyright © 2020-2023  润新知