zoukankan      html  css  js  c++  java
  • Ubuntu上安装make命令并使用makefile文件简化操作

    make命令作用:

      对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。因此,有效的利用make和makefile工具可以大大提高项目开发的效率。

    make命令下载:

    先更新找到ubuntu-make

    sudo apt-get update
    sudo apt-get install ubuntu-make

    再下载(我Ubuntu上直接有make命令,所以我没使用上面那两个命令,运行下面命令我的make命令更新到了最新版本)

    sudo apt-get install make

    gcc编译过程:

    对一个test.c文件进行编译首先需要使用下面命令

    gcc -c test.c

    使源文件变成*.o文件

    之后使用下面命令

    gcc -o test.exe test.o

    这条命令的作用就是指出test.exe可执行文件(因为Linux上可执行文件不需要exe结尾,所以你也可以换一个其他名字)的生成需要test.o文件(如果需要更多*.o文件在后面列出就可以)

    make如何工作:

    make在当前目录下寻找“Makefile”或“makefile”文件
    若找到,查找文件中的第一个目标文件.o
    若目标文件不存在,根据依赖关系查找.s文件
    若.s文件不存在,根据依赖关系查找.i文件
    若.i文件不存在,根据依赖关系查找.c文件,此时.c文件一定存在,于是生成一个.o文件,再去执行

    makefile文件格式:

    <target>: <prerequisites>
    [Tab]<commands>

    第一行冒号前为目标,冒号后为前置条件;第二行必须由一个Tab键起首,后接命令;目标是必须的,不可省略;前置条件和命令是可选的,但两者必须至少存在一个。

    示例:

    test2.exe: test2.o
            gcc -o test2.exe test2.o
    
    test2.o: test2.c
            gcc -c test2.c

    这意味着生成test.exe需要前置条件test2.o,生成test.o需要前置条件test2.c

    1、test.c文件存在所以会执行下面的代码 gcc -c test2.c

    2、test.o文件存在所以会执行下面代码     gcc -o test2.exe test2.o

    这样写的限制:用一个Makefile同时编译多个.c文件并生成可执行文件需要添加一个伪可执行文件。makefile 默认只生成第一个可执行文件,所以可以用伪可执行文件,make 过程中并不生成 这个伪可执行文件,在如下代码中,all就是一个伪执行文件。

    #makefile
    CC=gcc
    all:test1 test2
    .PHONY:all
    
    test2 :test2.o
            $(CC) -o $@ $<
    test1 :test1.o
            $(CC) -o $@ $<
    test2.o:test2.c
            $(CC) -o $@ -c $<
    test1.o:test1.c
            $(CC) -o $@ -c $<
    
    clean:
            rm -rf test1 test2 test1.o test2.o
            
    .PHONY:all clean

    make的一些选项:

    1、-f

    直接运行make命令会在当前文件夹下寻找makefile或者Makefile文件,你可以通过-f选项来改变这种默认特性

    make -f my_makefile

    make 命令会选择扫描 my_makefile 来代替 Makefile。

    2、-C

    你可以为 make 命令提供不同的目录路径,在寻找 Makefile 之前会切换目录的。这是一个目录,假设你就在当前目录下:

    $ ls
    file file2 frnd1.cpp

    但是你想运行的 make 命令的 Makefile 文件保存在 ../make-dir/ 目录下,你可以这样做:

    $ make -C ../make-dir/

     make 命令首先切到特定的目录下,在那执行,然后再切换回来。

    3、-B

    make -B 会强制编译所有的目标文件以及最终的执行文件。

    make的语法可以参看:https://blog.csdn.net/qq_35451572/article/details/81092902

     

  • 相关阅读:
    MySQL 分区
    InnoDB 锁
    【神经网络】自编码聚类算法--DEC (Deep Embedded Clustering)
    【神经网络】变分自编码大杂烩
    【异常检测】Isolation forest 的spark 分布式实现
    【推荐系统】评估指标总结
    【推荐系统】neural_collaborative_filtering(源码解析)
    hadoop之计数器和管道的mrunit测试
    thrift0.5入门操作
    awk之close函数
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/14863515.html
Copyright © 2011-2022 走看看