【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\n", 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("\n开始打印当前系统时间\n");
    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则为空格。

 

 

流程截图以及结果

posted on   崔好好  阅读(3572)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示