打算学习一下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", +a->tm_year, + 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 ;
}

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

       OUT = main1.out
OBJECTS = main1.o gettime.o $(OUT) : $(OBJECTS)
gcc -Wall $^ -o $@
main1.o : main1.c
gettime.o : gettime.c .PHONY: clean
clean:
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则为空格。

 

流程截图以及结果

【Linux学习】 写一个简单的Makefile编译源码获取当前系统时间的更多相关文章

  1. 在linux操作系统上进行简单的C语言源码的gcc编译实验

    尝试在linux上用gcc 而非封装完好的codeblocks,vs等ide 来编译c和cpp源程序 首先查看我的gcc版本,我的是VM centos 自带的,没有的话得自行安装,安装上gcc就可以在 ...

  2. GNU Make 学习系列一:怎样写一个简单的Makefile

    编程通常遵循一个相当简单的程序:编辑源文件,编译源代码成可执行的格式,调试结果.尽管将源代码翻译成可执行程序是常规的过程,如果做的不正确,程序员可能会浪费大量的时间去追踪问题.大多数的开发者都经历过这 ...

  3. 在Linux下写一个简单的驱动程序

    本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以及Linux上应用程序到驱动的执行过程.相信这样由浅入深.由具体实例到抽象理论的描述更容易初学者入手Linux ...

  4. 【转】在Linux下写一个简单的驱动程序

    转自:https://www.cnblogs.com/amanlikethis/p/4914510.html 本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以 ...

  5. 【MVVMLight小记】二.开发一个简单图表生成程序附源码

    上一篇文章介绍了怎样快速搭建一个基于MVVMLight的程序http://www.cnblogs.com/whosedream/p/mvvmlight1.html算是简单入门了下,今天我们来做一个稍许 ...

  6. 一步一步写一个简单通用的makefile(四)--写一个通用的makefile编译android可执行文件

    通常要把我们自己的的代码编译成在android里面编译的可执行文件,我们通常是建一个文件夹 . ├── Android.mk ├── Application.mk ├── convolve.cl ├─ ...

  7. 写一个简单的Makefile

    all: osx .PHONY: osx linux run osx: kale.dylib linux : kale.so run: kale.bin CC = gcc OBJECTS = $(pa ...

  8. 用QT写的简单Todo记事本-附源码(浮动窗口)

    去年边学边写了搞了很久, 已经好久没继续开发了, 先放出来供大家参考吧. 发现自己的学习能力还是不错的. 技术点: 使用QT, QML技术 代码参考: https://github.com/cnscu ...

  9. 一个简单的Makefile的编写【用自己的话,解释清楚这些】

    用自己的话,解释清楚这些~ Makefile是程序员编写出来指导编译器编译程序源码为目标文件(可执行文件,或链接库) 这里只写一个简单的Makefile 作为例子 其需求如下: frank@ubunt ...

随机推荐

  1. 是谁决定了走redis缓存?当然是mybatis啊

    1.是谁决定了走redis缓存?当然是mybatis啊 mybatis里默认实现数据的增删改查功能,这里要用到缓存啊 而且是mybatis这种orm框架采用缓存机制的,mybatis默认都有两层缓存了 ...

  2. darwin转发时,摄像机在3G和4G模式下的参数设置

    darwin转发时,摄像机在3G和4G模式下的参数设置 我们转发的是摄像机的子码流,因为在不同的网络环境下,为了达到当前网络环境下最清晰,最流畅的目标,在转发前要根据使用的是3G还是4G及信号强度来自 ...

  3. 使用MyBatis链接MySQL

    本文主要介绍了如何使用mybatis进行简单的数据库操作.本人使用的是mybatis3.05. 1.创建数据库表(User表) CREATE TABLE `NewTable` (`userId` bi ...

  4. NPOI读取Excel,导入数据到Excel练习01

    NPOI 2.2.0.0,初级读取导入Excel 1.读取Excel,将数据绑定到dgv上 private void button1_Click(object sender, EventArgs e) ...

  5. Redis是什么?

    1. Redis是什么 这个问题的结果影响了我们怎么用Redis.如果你认为Redis是一个key value store, 那可能会用它来代替MySQL;如果认为它是一个可以持久化的cache, 可 ...

  6. word文档标题级别批量更改——批量降级与升级实例

    word文档标题级别批量更改——批量降级与升级实例   word文档标题级别批量更改——批量降级实例 2012年12月21日16:30:44 现有一个3级文档结构的word文档,如下图所示 先需要将上 ...

  7. C# 静态类 + c# 访问器 用途

    C# 静态类    http://blog.csdn.net/dodream/article/details/4588498 静态类的主要特性:仅包含静态成员. 无法实例化. 是密封的. 不能包含实例 ...

  8. Pig简单入门

    pig是hadoop客户端,使用类似于SQL的面向数据流的语言pig latin,这个语言可以完成排序,过滤,求和,关联等操作,可以支持自定义函数.Pig自动把pig latin 映射为Map-Red ...

  9. 函数ut_2_log

    计算某个数的对数(最大的) 例如 16 计算后为 4 2的4次方为16 例如15 计算后为3 2的3次方为8 /******************************************** ...

  10. MVVM设计模式《网摘》

    MVVM模式能够帮你把你程序的业务与展现逻辑从用户界面干净地分离开.保持程序逻辑与界面分离能够帮助解决很多开发以及设计问题,能够使你的程序能更容易的测试,维护与升级.它也能很大程度的增加代码重用性,并 ...