zoukankan      html  css  js  c++  java
  • GNU make

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

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

    Makefile(术语)

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

      Target: prerequisites

        command

      目标 依赖 命令

    例子:main.o : main.c

                         gcc –c main.c(注意:命令需要以TAB键开始)

    例:

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

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

      .PHONY:clear

      clear: rm  –f  hello  main.o  func1.o  func2.o

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

    利用变量

    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中,存在系统默认的自动化变量

      (1)$^:代表所有的依赖文件

      (2)$@:代表目标

      (3)$<:代表第一个依赖文件

    例:hello: main.o func1.o func2.o

                  gcc main.o fun1.o func2.o –o hello

    ->

      hello: main.o func1.o func2.o

             gcc $^ -o $@

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

      hello:hello.c

             @gcc hello.c –o hello

    @:取消回显

  • 相关阅读:
    NuGet打包推送批处理以及MSBuild(通用版)
    Linux su和sudo命令的区别,并获得root权限
    linux下命令运行目录上程序前面要加./
    java的系统时间,怎么计算从现在到凌晨还剩下多少时间?
    静态资源压缩(GZIP) 专题
    架构选型之Nodejs与Java
    基于 WebRTC 创建一款多人联机游戏
    django从0到1搭建网站
    Android 关于ExpandableListView去掉里头的分割线
    Android 关于ExpandableListView刷新的解决办法
  • 原文地址:https://www.cnblogs.com/fengz/p/7039334.html
Copyright © 2011-2022 走看看