zoukankan      html  css  js  c++  java
  • 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

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


  • 相关阅读:
    sqlserver整理的实用资料
    [转载]威力导演14旗舰破解版(中文简体)|取消30天限制CyberLink&nb
    联想Y50用U盘改装win7的详细教程
    SQL的四种连接-左外连接、右外连接、内连接、全连接
    笔记本玩游戏不能全屏应该如何解决
    于win2008R2虽然激活,但是一个小时之后就会自动强制关机的问题
    sql server2008 r2 密钥
    减肥
    【ARC082E】ConvexScore
    CJB的大作
  • 原文地址:https://www.cnblogs.com/llguanli/p/8391582.html
Copyright © 2011-2022 走看看