热门标签 | 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


推荐阅读
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • C语言判断正整数能否被整除的程序
    本文介绍了使用C语言编写的判断正整数能否被整除的程序,包括输入一个三位正整数,判断是否能被3整除且至少包含数字3的方法。同时还介绍了使用qsort函数进行快速排序的算法。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • 《2017年3月全国计算机等级考试二级C语言上机题库完全版》由会员分享,可在线阅读,更多相关《2017年3月全国计算机等级考试二级C语言上机题库完全版( ... [详细]
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社区 版权所有