zoukankan      html  css  js  c++  java
  • 13 编程基础 makefile工程管理

    GNU make

          Linux程序员必须学会使用GNU make来构建和管理自己的软件工程。GNU的make能够使整个工程的编译、链接只需要一个命令就可以完成。

     makefile

          make在执行时,需要一个命名为Makefile的文件。Makefile文件描述了整个工程的编译、链接等规则。其中包括:工程中哪些源文件需要编译以及如何编译;需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。

    Makefile(例)

     1 hello:main.o func1.o func2.o
     2     gcc main.o func1.o func2.o -o hello
     3 main.o:main.c
     4     gcc -c main.c
     5 func1.o:func1.c
     6     gcc -c gunc1.c
     7 func2.o:func2.c
     8     gcc -c func2.c
     9 .PHONY:clean
    10 clean:
    11     rm -f hello main.o func1.o func2.o

    Makefile

          规则:用于说明如何生成一个或多个目标文件,规则格式如下:

    targets:prerequisites
        command
    目标 依赖 命令

    main.o:main.c
        gcc -c main.c

    **命令需要一【TAB】键开始**

    目标

          在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被整个目标所连带出来的,所以一定要让马克知道你的最终目标是什么。一般来说,定义在Makefile中的目标可能会有很多,但是第一条规则中的目标将被确立为最终的目标。

    文件名

          make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定:
    make -f 文件名

    伪目标

          Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets)。

    .PHONY:clean
    clean:
        rm -f hello main.o func1.o func2.o

          “.PHONY”将“clean”目标声明为伪目标

    变量

    hello:main.o func1.o func2.o
        gcc main.o func1.o func2.o -o hello

          思考1:如果为hello目标添加一个依赖,如:func3.o,该如何修改?
          答案1:

    hello:main.o func1.o func2.o func3.o
        gcc main.o func1.o func2.o  func3.o -o hello

          答案2:

    obj=main.o func1.o func2.o func3.o
    hello:$(obj)
        gcc $(obj) -o hello

          在makefile中,存在系统默认自动化变量

    •             $^:代表所有依赖文件
    •             $@:代表目标
    •             $<:代表第一个依赖文件

          例:

    hello:main.o func1.o func2.o
        gcc main.o func1.o func2.o -o hello

    ==>

    hello:main.o func1.o func2.o
        gcc $^ -o $@

    杂项

         makefile中“#”字符后的内容被视作注释。

    hello.c:hello.c
        @gcc hello.c -o hello

          @:取消回显

  • 相关阅读:
    第十二章学习笔记
    UVa OJ 107 The Cat in the Hat (戴帽子的猫)
    UVa OJ 123 Searching Quickly (快速查找)
    UVa OJ 119 Greedy Gift Givers (贪婪的送礼者)
    UVa OJ 113 Power of Cryptography (密文的乘方)
    UVa OJ 112 Tree Summing (树的求和)
    UVa OJ 641 Do the Untwist (解密工作)
    UVa OJ 105 The Skyline Problem (地平线问题)
    UVa OJ 100 The 3n + 1 problem (3n + 1问题)
    UVa OJ 121 Pipe Fitters (装管子)
  • 原文地址:https://www.cnblogs.com/doitjust/p/6375858.html
Copyright © 2011-2022 走看看