• 【Linux学习】 写一个简单的Makefile编译源码获取当前系统时间


    打算学习一下Linux,这两天先看了一下gcc的简单用法以及makefile的写法,今天是周末,天气闷热超市,早晨突然发现住处的冰箱可以用了,于是先出去吃了点东西,然后去超市买了一坨冰棍,老冰棍居多,5毛钱一根,还有几根1.5的。

    嗯 接着说gcc的事

    先把源代码贴上来

    //gettime.h
    #ifndef _GET_TIME_H_
    #define _GET_TIME_H_
    
    void PrintCurrentTime();
    
    #endif

     

    //gettime.c
    
    #include <stdio.h>
    #include <time.h>  //time.h和stdio.h好像要放在前面,否则gcc报警告“ 隐式声明与内建函数 printf 不兼容”之类的
    #include "gettime.h"
    void PrintCurrentTime()
    {
        time_t t;
        struct tm* a;
        time(&t);
        a = localtime(&t);
        printf("%4d-%02d-%02d %02d:%02d:%02d
    ", 1900+a->tm_year, 1 + a->tm_mon,
              a->tm_mday, a->tm_hour, a->tm_min, a->tm_sec);
    
    }
    //main1.c
    
    #include <stdio.h>
    #include "gettime.h"
    
    int main()
    {
        printf("
    开始打印当前系统时间
    ");
        PrintCurrentTime();
    
        return 0;
    }

    代码很简单,就是获取当前系统时间并打印出来,然后看Makefile的写法

          1 OUT = main1.out
          2 OBJECTS = main1.o gettime.o
          3 
          4 $(OUT) : $(OBJECTS)
          5         gcc -Wall  $^ -o $@
          6 main1.o : main1.c
          7 gettime.o : gettime.c
          8 
          9 .PHONY: clean
         10 clean:
         11         rm -f *.o

    这里用了【变量】【隐晦规则】

    变量类似于宏定义,取值时用  $(变量名) 来取, $^ 表示所有依赖文件, $@ 表示当前目标文件, $< 表示第一个依赖文件

    所谓【隐晦规则】是一种推导模版,也就是“决定怎么样从具有扩展名为X的文件 构造出 另一种扩展名为Y的文件”;

    本例中,main1.o 依赖于main1.c,如果是完整的写法如下:

    gcc -c -Wall  main1.c  -o main1.o

    类似的,gettime.o依赖于gettime.c 写为 gcc -c -Wall  gettime.c -o gettime.o

    怎么用makefile?

    退出makefile编译,在终端中输入make命令,即可在当前目录中查找makefile。

    在make过程中生成的.o的中间文件怎么清理呢? 

    可以看上面makefile的最后几行,rm -f *.o 删除所有后缀为.o的文件,在make后,输入make clean命令即可。

     

    另外:

    1、makefile可以命名为"makefile" 也可以命名为"Makefile"

    2、makefile中命令前要有一个tab键,而非空格键或其他键,怎么验证是tab键而不是被替换为了空格呢? 在command模式下,移动光标到你认为的tab键处,然后按下键盘上的字母ga, 在command处如果显示9则为tab,如果显示32则为空格。

     

    流程截图以及结果

  • 相关阅读:
    Django各个文件中常见的模块导入
    js模板(template.js)实现页面动态渲染
    Netty 源码 Channel(一)概述
    Netty 源码 NioEventLoop(三)执行流程
    Netty 源码(一)Netty 组件简介
    Netty 源码(二)NioEventLoop 之 Channel 注册
    Java 算法(一)贪心算法
    Netty Reator(三)Reactor 模型
    Netty Reator(二)Scalable IO in Java
    Reactor 模型(一)基本并发编程模型
  • 原文地址:https://www.cnblogs.com/cuish/p/3854842.html
Copyright © 2020-2023  润新知