【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", +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编译源码获取当前系统时间的更多相关文章
- 在linux操作系统上进行简单的C语言源码的gcc编译实验
尝试在linux上用gcc 而非封装完好的codeblocks,vs等ide 来编译c和cpp源程序 首先查看我的gcc版本,我的是VM centos 自带的,没有的话得自行安装,安装上gcc就可以在 ...
- GNU Make 学习系列一:怎样写一个简单的Makefile
编程通常遵循一个相当简单的程序:编辑源文件,编译源代码成可执行的格式,调试结果.尽管将源代码翻译成可执行程序是常规的过程,如果做的不正确,程序员可能会浪费大量的时间去追踪问题.大多数的开发者都经历过这 ...
- 在Linux下写一个简单的驱动程序
本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以及Linux上应用程序到驱动的执行过程.相信这样由浅入深.由具体实例到抽象理论的描述更容易初学者入手Linux ...
- 【转】在Linux下写一个简单的驱动程序
转自:https://www.cnblogs.com/amanlikethis/p/4914510.html 本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以 ...
- 【MVVMLight小记】二.开发一个简单图表生成程序附源码
上一篇文章介绍了怎样快速搭建一个基于MVVMLight的程序http://www.cnblogs.com/whosedream/p/mvvmlight1.html算是简单入门了下,今天我们来做一个稍许 ...
- 一步一步写一个简单通用的makefile(四)--写一个通用的makefile编译android可执行文件
通常要把我们自己的的代码编译成在android里面编译的可执行文件,我们通常是建一个文件夹 . ├── Android.mk ├── Application.mk ├── convolve.cl ├─ ...
- 写一个简单的Makefile
all: osx .PHONY: osx linux run osx: kale.dylib linux : kale.so run: kale.bin CC = gcc OBJECTS = $(pa ...
- 用QT写的简单Todo记事本-附源码(浮动窗口)
去年边学边写了搞了很久, 已经好久没继续开发了, 先放出来供大家参考吧. 发现自己的学习能力还是不错的. 技术点: 使用QT, QML技术 代码参考: https://github.com/cnscu ...
- 一个简单的Makefile的编写【用自己的话,解释清楚这些】
用自己的话,解释清楚这些~ Makefile是程序员编写出来指导编译器编译程序源码为目标文件(可执行文件,或链接库) 这里只写一个简单的Makefile 作为例子 其需求如下: frank@ubunt ...
随机推荐
- qt外部数据传入实现动态的折线图绘制
在嵌入式开发中,实现数据收集与显示很常见,对于希望数据稳定的应用来说, 折现图的表现形式很符合条件. 本实现是通过qt的signal-slot来 ...
- Sqlmap基础(一)
(1)选项:-r REQUESTFILE Load HTTP request from a file (2)选项:--current-db Retrieve DBMS curr ...
- 基于Jws的WebService项目
基于Jws的WebService项目 1.服务器端建立 1.1.创建接口 [java] view plaincopy @WebService public interface IWebServi ...
- PCL—低层次视觉—点云滤波(基于点云频率)
1.点云的频率 今天在阅读分割有关的文献时,惊喜的发现,点云和图像一样,有可能也存在频率的概念.但这个概念并未在文献中出现也未被使用,谨在本博文中滥用一下“高频”一词.点云表达的是三维空间中的一种信息 ...
- P31、面试题2:实现Singleton模式
题目:设计一个类,我们只能生成该类的一个实例 java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单 ...
- 12个目标跟踪方面的资料12 Tracking
Goal Tracking Template - FEMA.gov Goal Tracking Template Set a weekly or biweekly deadline to report ...
- Image.FrameDimensionsList 属性-----具体使用案例
上一篇中说到了图片的具体产生以及属性,本篇主要是具体的使用,详情案例见下面的具体视图及代码 using System;using System.Collections.Generic;using Sy ...
- java.lang.NoSuchMethodError: No static method setLayoutDirection(Landroid/graphics/drawable/Drawable;I)V in class Landroid/support/v4/graphics/drawable/DrawableCompat
Bug: java.lang.NoSuchMethodError: No static method setLayoutDirection(Landroid/graphics/drawable/Dra ...
- 用imagemagick和tesseract-ocr破解简单验证码
用imagemagick和tesseract-ocr破解简单验证码 Tesseract-ocr据说辨识程度是世界排名第三,可谓神器啊. 准备工作: 1.安装tesseract-ocr sudo apt ...
- 1934. Black Spot(spfa)
1934 水题 RE了N久 后来发现是无向图 #include <iostream> #include<cstring> #include<algorithm> # ...