简单makefile示例
Makefile
cmd:
- g++
相信在linux下编程的没有不知道makefile的,刚开始学习linux平台下的东西,了解了下makefile的制作,觉得有点东西可以记录下。
下面是一个极其简单的例子:
现在我要编译一个Hello world,需要如下三个文件:
1. print.h
#include<stdio.h>
void printhello();
2. print.c
#include"print.h"
void printhello()
{
printf("Hello, world\n");
}
3. main.c
#include "print.h"
int main(void)
{
printhello();
return ;
}
好了,很简单的程序了。如果我们想要编译成功需要哪些步骤呢?
我认为在这里需要理解的就两步:
# 为每一个 *.c文件生成 *o文件。
# 连接每一个*o文件,生成可执行文件。
下面的makefile 就是根据这样的原则来写的。
一:makefile 雏形:
#makefile的撰写是基于规则的,当然这个规则也是很简单的,就是:
#target : prerequisites
command //任意的shell 命令
实例如下:makefile文件内容:
helloworld : main.o print.o #helloword 就是我们要生成的目标
g++ -std=c++11 -o helloworld main.o print.o#shell命令,最前面的一定是一个tab键
mian.o : mian.c print.h
g++ -std=c++11 -c main.c
print.o : print.c print.h
g++ -std=c++11 -c print.c clean :
rm helloworld main.o print.o
OK,一个简单的makefile制作完毕,现成我们输入 make,自动调用Gcc编译了,输入 make clean就会删除 hellowworld mian.o print.o
二:小步改进:
在上面的例子中我们可以发现 main.o print.o 被定义了多处,我们是不是可以向C语言中定义一个宏一样定义它呢?当然可以:
修改后的文件:
修改完毕,这样使用了变量的话在很多文件的工程中就能体现出方便性了。
三:再进一步:
再看一下,为没一个*.o文件都写一句gcc -c main.c是不是显得多余了,
能不能把它干掉?而且 main.c 和print.c都需要print.h,为每一个都写上是
不是多余了,能不能再改进?
能,当然能了:makefile内容:
objects = main.o print.o
helloworld : $(objects)
g++ -std=c++11 -o helloworld$(objects)
$(objects) : print.h # 都依赖print.h
mian.o : mian.c #干掉了gcc -c main.c 让Gun make自动推导了。
print.o : print.c
clean :
rm helloworld $(objects)
简单makefile示例的更多相关文章
- 【java开发系列】—— spring简单入门示例
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- hadoop环境安装及简单Map-Reduce示例
说明:这篇博客来自我的csdn博客,http://blog.csdn.net/lxxgreat/article/details/7753511 一.参考书:<hadoop权威指南--第二版(中文 ...
- EasyHook远注简单监控示例 z
http://www.csdn 123.com/html/itweb/20130827/83559_83558_83544.htm 免费开源库EasyHook(inline hook),下面是下载地址 ...
- Web Service简单入门示例
Web Service简单入门示例 我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...
- Ext简单demo示例
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- GDAL中MEM格式的简单使用示例
GDAL库中提供了一种内存文件格式--MEM.如何使用MEM文件格式,主要有两种,一种是通过别的文件使用CreateCopy方法来创建一个MEM:另外一种是图像数据都已经存储在内存中了,然后使用内存数 ...
- html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
这篇文章主要介绍了html5本地存储的localstorage .本地数据库.sessionStorage简单使用示例,需要的朋友可以参考下 html5的一个非常cool的功能,就是web stora ...
- hydra简单使用示例
本内容为网上收集整理,仅作为备忘!! hydra简单使用示例: 破解https: # hydra -m /index.php -l muts -P pass.txt 10.36.16.18 https ...
随机推荐
- 【LeetCode】113. 路径总和 II
题目 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ ...
- kali 中文乱码解决方法
本文转自https://www.cnblogs.com/sym945/p/11943842.html#4449966 1.更换阿里源 vim /etc/apt/sources.list,编辑源之后,a ...
- P1091 N-自守数
1091 N-自守数 (15分) 如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3,而 2 的末尾两位正好是 9,所以 9 是一个 3-自守 ...
- PE文件结构体-IMAGE_SECTION_HEADER
在PE文件头与原始数据之间存在一个区块表(Section Table),它是一个IMAGE_SECTION_HEADER结构数组, 区块表包含每个块在映像中的信息(如位置.长度.属性),分别指向不同的 ...
- 003-explode分割字符串
<?php $str = "品牌电脑@品牌手机@高档男士衬衫@高档女士挎包"; //定义字符串常量 $str_arr = explode("@", $st ...
- 如何用naviecat批量创建mysql数据
1.参考博文:https://blog.csdn.net/lelly52800/article/details/87267096 2.excel要与表结构一致 3.右键,导入向导,选择相应版本,点击“ ...
- 批量处理文件的Python程序
经常批量处理文件,这里有个python的模板,保存一下 这个例子是把目录里面所有子目录的mp3文件放慢0.85倍并保存到./processed/目录下面. #coding=utf-8 import s ...
- JS - if(flag) if(!flag)
1, if(flag) 判断是否为 true 2, if(!flag) 判断是否为false
- msf中arp_sweep使用报错:usbmon1:ERROR while getting interface flags:no such device
在许多的工具使用中,会出现很多的错误,要养成先思考再去寻找帮助的习惯 在用use命令使用arp_sweep模块的时候爆出错误:usbmon1:ERROR while getting interface ...
- 2020/2/17 zzcms8.2 PHP代码审计
0x00 看网站结构 ********************************* * * * ZZCMS产品版目录结构 * * * ****************************** ...