zoukankan      html  css  js  c++  java
  • Makefile 入门与基本语法 分类: C/C++ ubuntu 2015-05-18 11:16 466人阅读 评论(0) 收藏

    在我看来,学会写简单的Makefile,阅读较复杂的makefile,是每一个Linux程序员都必须拥有的基本素质。Makefile可以自动识别哪些源文件被更改过,需要重新编译,那些不需要。从而节省大型工程重新编译的时间。规则如下:

    1. 如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
    2. 如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程。
    3. 如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

    学会编写Makefile,不仅仅有益于你在Linux下编写大型工程。同时也能帮助你理解编译原理。远离IDE,了解编译过程。

    废话少说,Makefile其实最主要的语法只有一句:

    target ... : prerequisites ...
    command......

    target就是目标文件,prerequisites表示所有生成目标文件所需的拥有依赖关系的文件。command就是由依赖文件生成目标文件的编译命令。
    所以,对于单个的.c文件,一个最最简单的Makefile如下:

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

    当然,对于单个C文件使用Makefile几乎没有意义。
    下面来看一个稍复杂一点儿的Makefile文件:

    DIR=./
    object: main.o 1.o 2.o 
        gcc -o object main.o 1.o 2.o
    1.o: 1.c my.h
        gcc -c 1.c
    2.o: 2.c my.h
        gcc -c 2.c
    main.o: main.c my.h
        gcc -c main.c
    
    .PHONY: clean
    
    clean: 
        rm $(DIR).o object

    这是一个稍有实用价值的Makefile,工程由四个源文件构成:my.h 1.c 2.c main.c。
    放在最前面的

    DIR=./

    是变量定义。Makefile中的的变量定义多为字符串,主要目的是为了避免重复长字符串输入。
    1.o 2.o main.o 分别是三个源文件生成的链接文件。如果你不知道链接文件是什么。。。。找度娘吧。。
    首先第一个target一般为最终目标文件,之后的target一般为过程文件。
    .PHONY是用来定义伪目标用的。伪目标不是实际要生成的文件,一般为make命令带入的参数。例如上面文件中的clean,其对应的命令为清除所有中间文件以及最后的目标文件。
    其实,一般不定义伪目标也是OK的,但是一旦目录下出现了和伪目标重名的文件。这时候Makefile执行伪目标命令就会出错。因为Makefile不知道这是伪目标,而伪目标又没有依赖文件,所以Makefile会跳过伪目标文件对应的命令。

    以上,是对Makefile的一个简单入门介绍,一般,用以阅读大多数的Makefile都已经足够了。深究请百度或者Google。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    容器技术(三)搭建本地 Registry【15】
    容器技术(三) 使用公共 Registry【14】
    容器技术(三) 镜像命名的最佳实践【13】
    容器技术(三) RUN vs CMD vs ENTRYPOINT【12】
    容器技术(三) dockerfile常用指令【11】
    容器技术(三) dockerfile调试【10】
    容器技术(三) 镜像缓存特性【9】
    容器技术(三) Dockerfile 构建镜像【8】
    容器技术(三)构建镜像【7】
    layui的图标知识
  • 原文地址:https://www.cnblogs.com/paulweihan/p/4660096.html
Copyright © 2011-2022 走看看