zoukankan      html  css  js  c++  java
  • makefile实例(1)-helloworld

    简单makefile实例

    1,源文件:

    main.cpp

    #include <stdio.h>
    
    int main()
    {
        printf("Hello World
    ");
        return 0;
    }

    2,编写makefile

    若使用g++命令编译链接程序,可以:

    g++ -o hello main.cpp

    g++ [-o main.o] -c main.cpp

    g++ -o hello main.o

    若使用make命令,则可以这么编写makefile文件(两种写法分别对应了上面说的两条g++命令):

    提示:

    2.1,makefile的基本格式为“目标:依赖 命令”
    一个 makefile 主要含有一系列的规则,如下:
    A: B
    (tab)<command>
    (tab)<command>
    重要: 每个命令行前都必须有tab符号
    举例来说,一种简单写法如下:
    main : main.c
      gcc main.c –o main
    在终端执行make命令就可以得到main文件了

    2.2 执行过程

      通常make命令会逐行解释makefile文件,然后执行第一个”目标格式行”及其后的”目标命令行“。直到碰到下一个”目标格式行”为止。

      注意这里指的是下一个”目标格式行“,而不是文件末尾。

      所以我们把生成最后的可执行文件的makefile代码放在第一行时,只需要键入make就可以。

      而有些makefile文件未将生成最后的可执行文件的代码放在第一行,所以如果make的话,就只能执行到第一个目标格式行的code.

      另外,我们使用伪目标让makefile执行不同的操作,如定制Debug和Release版本,清空中间生成文件,安装软件包等等。

    2.3, 这里要说明一点的是,clean不是一个文件,它只不过是一个动作名字,其冒号后面为空,make就不会找文件的依赖性,也就不会自动执行其后所定义的命令。

    要执行其后的命令,就需要在make 命令后显式指出这个名字。这样我们就可以定义一些与编译无关的命令:打包程序,清理程序等外围操作等。

     用".PHONY {目标名}"定义一个伪目标, 用"make {目标名}"执行该伪目标
    .PHONY : clean
    clean :
      @rm -f main *.o
      @echo 'clean'
    此时执行make命令,终端会显示系统执行的每条命令,如果你不想系统显示它执行的命令,在每条命令的前面加上“@”即可。

    hello : main.cpp
        g++ main.cpp -o hello
    clean:
        rm hello main.o -rf

    hello: main.o
        g++ -o hello main.o 
    main.o : main.cpp
        g++ -c main.cpp 
    
    clean:
        rm hello main.o -rf

    3,执行make,进行编译链接,

    [root@localhost 0-helloworld]#make
    g++ -o hello main.o 
    [root@localhost 0-helloworld]#ll
    总用量 20
    -rwxr-xr-x 1 root root 6908 11月 26 22:59 hello
    -rw-r--r-- 1 root root   72 11月 26 22:10 main.cpp
    -rw-r--r-- 1 root root 1472 11月 26 22:35 main.o
    -rw-r--r-- 1 root root  144 11月 26 22:51 makefile

    4,执行程序

    [root@localhost 0-helloworld]#./hello 
    Hello World

    5,清理程序

    [root@localhost 0-helloworld]#make clean
    rm hello main.o -rf
    [root@localhost 0-helloworld]#ll
    总用量 8
    -rw-r--r-- 1 root root  72 11月 26 22:10 main.cpp
    -rw-r--r-- 1 root root 151 11月 26 23:02 makefile
    [root@localhost 0-helloworld]#
  • 相关阅读:
    数据可视化之 图表篇(七)柱形图
    数据可视化之 图表篇(六)桑基图
    数据可视化之 图表篇(五) PowerBI图表不够炫酷?来看看这个
    数据可视化之 图表篇(四) 那些精美的Power BI可视化图表
    数据可视化之 图表篇(三)体验Power BI最新发布的AI图表:分解树
    数据可视化之 图表篇(二)如何用Power BI制作疫情地图?
    数据可视化之 图表篇(一)Power BI可视化,几张图表认识疫情现状
    MCMC随机采样
    Linux中的计划作业
    Linux进程
  • 原文地址:https://www.cnblogs.com/jacklikedogs/p/4125317.html
Copyright © 2011-2022 走看看