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

          @:取消回显

  • 相关阅读:
    A1051 Pop Sequence (25 分)
    A1060 Are They Equal (25分)
    A1063 Set Similarity (25分)
    A1037 Magic Coupon (25分)
    Mybatis获取插入记录的自增长ID
    压力测试工具ab的使用
    spring注解
    《spring技术内幕》读书笔记(1)——什么是POJO模式
    用HttpSessionListener统计在线用户或做账号在线人数管理
    (转)注释驱动的 Spring cache 缓存介绍
  • 原文地址:https://www.cnblogs.com/doitjust/p/6375858.html
Copyright © 2011-2022 走看看