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示例的更多相关文章

  1. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  2. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  3. hadoop环境安装及简单Map-Reduce示例

    说明:这篇博客来自我的csdn博客,http://blog.csdn.net/lxxgreat/article/details/7753511 一.参考书:<hadoop权威指南--第二版(中文 ...

  4. EasyHook远注简单监控示例 z

    http://www.csdn 123.com/html/itweb/20130827/83559_83558_83544.htm 免费开源库EasyHook(inline hook),下面是下载地址 ...

  5. Web Service简单入门示例

    Web Service简单入门示例     我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...

  6. Ext简单demo示例

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  7. GDAL中MEM格式的简单使用示例

    GDAL库中提供了一种内存文件格式--MEM.如何使用MEM文件格式,主要有两种,一种是通过别的文件使用CreateCopy方法来创建一个MEM:另外一种是图像数据都已经存储在内存中了,然后使用内存数 ...

  8. html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例

    这篇文章主要介绍了html5本地存储的localstorage .本地数据库.sessionStorage简单使用示例,需要的朋友可以参考下 html5的一个非常cool的功能,就是web stora ...

  9. hydra简单使用示例

    本内容为网上收集整理,仅作为备忘!! hydra简单使用示例: 破解https: # hydra -m /index.php -l muts -P pass.txt 10.36.16.18 https ...

随机推荐

  1. windows下 RN 环境搭建

    01.安装 Android Studio 02.NodeJs 03.Python204.JDK 05.安装Genymotion模拟器06.java 环境配置07.andriud sdk 配置08.An ...

  2. Excel中神奇的vlookup函数之基础应用

      1.问题:   如下示例,需要将右边的表格匹配上对应工号的销售额. 这属于vlookup函数最基础的单条件匹配应用,左边表称为A表.右边表称为B表. 2.vlookup函数套路介绍 vlookup ...

  3. Andorid 搭建 Linux服务器(一)

    00.搭建环境 电脑系统:MacOS下Win7虚拟机 手机型号:红米Note5A 手机系统:MIUI10开发版 软件: SuperSU      --通过recovery刷入,管理ROOT权限 Bus ...

  4. Oracle--sqlplus--常用命令

    登陆:win+R输入sqlplus即可 如果前期没有用户可以输入sqlplus /nolog  记得sqlplus后有一个空格 --格式化命令 进行数据查询时,默认的方式排版会很乱,如果我们要解决这个 ...

  5. Ubuntu1804 双网卡的设置

    在WIFI模式下,既可以使用ping开发板,又可上网.     目标:ubuntu1804下使用两个网卡 网卡(eth0):用于桥接主机的物理网卡 网卡(eth1):用于NAT模式下共享主机IP,用于 ...

  6. ruby资料

    源码样例 链接: https://pan.baidu.com/s/1mh55bFM 密码: 6cjy 初级代码 链接: https://pan.baidu.com/s/1hschnUW 密码: 8n1 ...

  7. checkbox checked属性值

    记住我1<input type='checkbox' /> 记住我2<input type='checkbox' /> <button onclick='hehe();' ...

  8. python 获取cpu、内存、硬盘等实时信息 psutil

    psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(CPU,内存,磁盘,网络等)信息,主要应用于系统监控,分析和限制系统资源及进程的管理,它实现了同等命令行工具提供的功能,如ps, ...

  9. mariadb galera启动问题

    搭建了mariadb galera集群后,整个集群停掉后如何启动呢,我们要先启动那个节点呢,今天我尝试把集群机器全部停掉,然后任意启动一个节点,发现报如下的错误: 170620 21:32:55 [E ...

  10. linux解决端口冲突问题

    # 查看9000这个端口是否被使用 netstat -lnt | grep 9000 -l       显示正在被监听(listen)的端口 -n     表示直接显示端口数字 -t      表示的 ...