zoukankan      html  css  js  c++  java
  • makefile简单入门(二)

    继续前面的一篇文章

    objects = main.o add.o sub.o
    test:$(objects)
         gcc -o test $(objects)
    main.o:main.c
         gcc -c main.c
    add.o:add.c add.h
         gcc -c add.c
    sub.o:sub.c sub.h
         gcc -c sub.c
    .PHONY:clean
    clean:
         rm test $(objects)

    其中objects是makefile中的变量,如果我们这里不用变量,那么这个makefile文件会写成什么样?

    test:main.o add.o sub.o
        gcc -o test main.o add.o sub.o
    main.o:main.c
        gcc -c main.c
    add.o:add.c add.h
        gcc -c add.c
    sub.o:sub.h sub.c
        gcc -c sub.c
    .PHONY:clean
    clean:
        rm test $(objects)

    不使用变量的时候,main.o add.o sub.o会被写多次,如果添加或者删除一个目标文件的时候,就需要在两个地方修改了。

    在makefile中我们可以使用变量。makefile的变量也就是一个字符串,理解成C语言中的宏可能会更好。

    比如,我们声明一个变量,叫objects, OBJECTS, objs, OBJS, obj, 或是 OBJ,反正不管什么啦,只要能够表示obj文件就行了。我们在makefile一开始就这样定义:

        objects = main.o add.o sub.o

    于是,我们就可以很方便地在我们的makefile中以“$(objects)”的方式来使用这个变量了。如果一行写不下,可以像C语言那样,添加一个换行连字符。

    比如 objects = main.o kbd.o command.o display.o

                 insert.o search.o files.o utils.o

    让make自动推导

     

    GNU的make很强大,它可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去在每一个[.o]文件后都写上类似的命令,因为,我们的make会自动识别,并自己推导命令。

     

    只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一个whatever.o,那么whatever.c,就会是whatever.o的依赖文件。

    并且 cc -c whatever.c 也会被推导出来,于是,我们的makefile再也不用写得这么复杂。我们的是新的makefile写成如下:

    objects = main.o add.o sub.o
    test:$(objects)
        gcc -o test $(objects)
    
    add.o:add.h
    sub.o:sub.h
    .PHONY:clean
    clean:
        rm test $(objects)

    现在问题又来了,如果工程中有很多的.h文件,每一个目标文件需要对应多个.h文件,这样的话,就会有多行的.h文件的依赖关系,能不能把它们收拢起来,统一写在一个地方呢?

     

     

  • 相关阅读:
    UrlRewrite(地址变换)技术在IIS 5.0/ASP平台上面的应用
    Asp.Net页面输出到EXCEL
    [收藏] ASP.NET缓存:方法和最佳实践
    基于.NET的全文索引引擎Lucene.NET
    [ASP.NET]支持up,down以及pageup,pagedown,home,end,Enter键盘操作的DataGrid
    无知所以羞耻
    你相信世界上有心有灵犀的事情吗?
    javascript的日期加减
    2007312
    人应该多向上
  • 原文地址:https://www.cnblogs.com/hpcpp/p/6957675.html
Copyright © 2011-2022 走看看