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文件的依赖关系,能不能把它们收拢起来,统一写在一个地方呢?

     

     

  • 相关阅读:
    codeforces 455B A Lot of Games(博弈,字典树)
    HDU 4825 Xor Sum(二进制的字典树,数组模拟)
    hdu 1800 Flying to the Mars(简单模拟,string,字符串)
    codeforces 425A Sereja and Swaps(模拟,vector,枚举区间)
    codeforces 425B Sereja and Table(状态压缩,也可以数组模拟)
    HDU 4148 Length of S(n)(字符串)
    codeforces 439D Devu and Partitioning of the Array(有深度的模拟)
    浅谈sass
    京东楼层案例思维逻辑分析
    浅谈localStorage和sessionStorage
  • 原文地址:https://www.cnblogs.com/hpcpp/p/6957675.html
Copyright © 2011-2022 走看看