热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux程序设计学习笔记----动手编写makefile文件

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

Befroe Beginning.

之前定了暑假的plan ,关于Linux的书籍现在在看的是ALP和Linux高级程序设计(杨宗德)第三版.在计划中的是Linux高级环境编程.

现在开始关于Linux程序设计的第一篇学习笔记.

本来打算把名字写成教程,不过觉得自己完全是新手在自学,还是写学习笔记比较负责和适合.

希望可以一起学习进步.

Linux程序设计(原书第2版)(PDF中文版 + 源码) 2011-04/34147.htm

u-boot Makefile完全解读 2013-04/83529.htm

实验平台上Makefile详细的解释 2014-01/94827.htm

Makefile之Linux内核模块的Makefile写法分析 2013-06/85842.htm

Makefile之写demo时的通用Makefile写法 2013-05/84679.htm

Makefile之大型工程项目子目录Makefile的一种通用写法 2013-05/84678.htm

引入

首先我们假设这样一个场景.我们有一个程序包含了三个文件,分别是源码文件main_plus,c和function_plus.c以及头文件mydefine_plus.h.

其中main主要是调用功能函数,功能函数则是实现简单的累加,头文件声明函数和一些库函数.代码分别如下:

main_plus.c

/*************************************************************************
    > File Name: main_plus.c
    > Author: suool
    > Mail: 1020935219@qq.com
    > Created Time: 2014年07月23日 星期三 17时31分23秒
************************************************************************/

/**@file main_plus.c */
/** 接收参数,调用功能函数,输出结果. */

#include "mydefine_plus.h"

int main(void)
{
    int a=0, b=0;
    printf("这是一个求和的程序,请输入数字a和b,程序讲输出a到b的累加结果.\n");
    printf("Please enter integer a:");
    scanf("%d", &a);
    printf("\nPlease enter integer b:");
    scanf("%d", &b);
    if(a>b)
    {
        printf("\nThe sum is %d\n", plus(b,a));
    }
    else
    {
        printf("\nThe sum is %d\n", plus(a,b));
    }
    return 0;
}

mydefine_plus.h.

/*************************************************************************
> File Name: mydefine_plus.h
> Author: suool
> Mail: 1020935219@qq.com
> Created Time: 2014年07月23日 星期三 17时36分16秒
************************************************************************/
/** @file mydefine_plus.h */
/** 函数声明和包含*/

#ifndef _MYDEFINE_PLUS_H
#define _MYDEFINE_PLUS_H
#include
int plus(int a, int b);
#endif

现在我们要编译这个程序,我们可以怎么做呢?

这就是这次要解决的问题.

make文件编写

对于上面的问题,我们传统的解决方法是这样的:

#Linux 程序设计学习笔记----动手编写makefile文件

即是分别编译这两个文件,然后链接变成目标可执行文件,

当然,对于三个甚至五个的这样的程序都是可以的,但是如果对于更大的程序呢?

或者我们修改了某个程序,难道要重新编写这些命令?

显然,这不是一个明智的选择,因此,我们便导出make文件,即自动执行编译的文件.只要执行一下make命令,everything is done  !

so, let`s see how to do it.

首先我们先把这个程序的文件的makefile文件贴一下,如下:

makefile

main : main_plus.o function_plus.o
 gcc -o main main_plus.o function_plus.o
main_plus.o : main_plus.c mydefine_plus.h
 gcc -c main_plus.c
function_plus.o : function_plus.c mydefine_plus.h
 gcc -c function_plus.c
clean:
 rm -f *.o main

makefile文件的注释是#后面的语句.

有Makefile文件后,不管我们什么时候修改了源程序当中的什么文件,我们只要执行make命令,我们的编译器都只会去编译与我们修改的文件有关的文件,其它的文件不会处理.

验证如下:先执行一次make命令,如下:

#Linux 程序设计学习笔记----动手编写makefile文件

这次自动编译了两个c文件,我们现在修改function_plus.c文件,再次执行make命令,结果如下:

#Linux 程序设计学习笔记----动手编写makefile文件

这次只是对刚刚修改的文件进行了编译.

更多详情见请继续阅读下一页的精彩内容: 2014-07/104614p2.htm


推荐阅读
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
author-avatar
youth冰点
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有