*通常自己安装的软件放在 /usr/local/软件名   中,而将源文件放在/usr/local/src

*为安装到单独目录的软件之 man page 加入 man path 搜寻:
  如果你安装的软件放置到 /usr/local/software/ ,那么 man page 搜寻的讴定中,可能就得要在
  /etc/man.config 内的 40~50 行左右处,写入如下的一行:
  MANPATH /usr/local/software/man
  这样才可以使用 man 来查询该软件的在线文件啰!

*Tarball类的软件:用tar打包,然后压缩。通常里边会有:

  • 源代码
  • 侦测程序档案(可能是configue或config等名字)
  • 本软件的简易说明与安装说明(INSTALL和README)

一个软件的 Tarball安装的基本流程:  下载->将Tarball解开->gcc进行源码编译(产生目标文件object file)->用gcc进行函数库、主、子程序的链接,形成主要的二进制文件->执行二进制文件

a、编译和链接  

  • 编译 :  gcc -c a.c b.c   然后生成a.o和b.o(a.c和b.c依然存在)  
  • 链接:       gcc -o x a.o b.o 生成x这一个binary文件(.o和.c被链接到一起)。其中.o文件就是目标文件(object file)
  • gcc编译如果不加c或者o参数,默认生成a.out二进制文件

b、编译时加入函数库  

  • gcc a.c -lm -L/lib -L/usr/lib  -l表示加入某个函数库   -m是libm.so函数库,省略了里边于扩展名。
  • -L后面跟的是头文件放置的路径(系统函数库linux默认是放在/lib和/usr/lib)

1.make和makefile(使用make工具省略上面的安装过程)

  • 先编辑makefile这个规则文件,内容中要有main这个执行档
  • 当制作好makefile后,输入make命令会根据makefile中的内容去编译相关档案。

2.makefile的基本语法与变量

  • makefile 具有两个标的,分别是 main 和 clean ,如果我们想要建立main 的话,输入make main,如果想要清除有的没的,输入make clean即可啊!而如果想要先清除目标文件再编译 main 这个程序的话,就可以这样输入:make clean main。
[root@www ~]# vi makefile
main: main.o haha.o sin_value.o cos_value.o
gcc -o main main.o haha.o sin_value.o cos_value.o -lm
#建立新的规则,此规则的标的名称为 clean
clean:
rm -f main main.o haha.o sin_value.o cos_value.

执行后是

[root@www ~]# make clean main
rm -rf main main.o haha.o sin_value.o cos_value.o
cc -c -o main.o main.c
cc -c -o haha.o haha.c
cc -c -o sin_value.o sin_value.c
cc -c -o cos_value.o cos_value.c
gcc -o main main.o haha.o sin_value.o cos_value.o -lm
  • [root@www ~]# vi makefile
    LIBS = -lm
    OBJS = main.o haha.o sin_value.o cos_value.o
    main: ${OBJS}
    gcc -o main ${OBJS} ${LIBS}
    clean:
    rm -f main ${OBJS}

    由 shell script 那时学到的『变数』来更简化 makefile

3.tarball软件安装的指令下达步骤

1> ./configure
这个步骤就是在建立 Makefile 这个档案啰!通常程序开发者会写一支 scripts 来检查你的 Linux
系统、相关的软件属性等等,这个步骤相当的重要, 因为未来你的安装信息都是这一步骤内完成
的!另外,这个步骤的相关信息应该要参考一下该目录下的 README 或 INSTALL 相关的档案!
2> make clean
make 会读取 Makefile 中关亍 clean 的工作。这个步骤丌一定会有,但是希望执行一下,因为
他可以去除目标档案!因为谁也不确定原始码里面到底有没有包含上次编译过的目标档案 (*.o)
存在,所以当然还是清除一下比较妥当的。 至少等一下新编译出来的执行档我们可以确定是使用
自己的机器所编译完成的嘛!
3>make
make 会依据 Makefile 当中的预讴工作迚行编译的行为!编译的工作主要是迚行 gcc 来将原始
码编译成为可以被执行的 object files ,但是这些 object files 通常还需要一些凼式库之类的
link 后,才能产生一个完整的执行档!使用 make 就是要将原始码编译成为可以被执行的可执行
文件,而这个可执行文件会放置在目前所在的目录之下, 尚未被安装到预定安装的目录中;
4>make install
通常这就是最后的安装步骤了,make 会依据 Makefile 这个档案里面关亍 install 的项目,将上
一个步骤所编译完成的数据给他安装到预定的目录中,就完成安装啦!

1.Tarball软件make与makefile详解(还需要补充)的更多相关文章

  1. Helloworld模块之内核makefile详解

    Hello World 模块以及对应的内核makefile详解 hello.c: #include <linux/module.h> //所有模块都需要的头文件 #include < ...

  2. Makefile详解--隐含规则

    Makefile详解--隐含规则(转) Makefile系列文章,这里有个前辈连续洗了一个系列来介绍,共有26篇博客文章. http://www.cppblog.com/ivenher/archive ...

  3. StreamSets学习系列之StreamSets的Core Tarball方式安装(图文详解)

    不多说,直接上干货! 前期博客 StreamSets学习系列之StreamSets支持多种安装方式[Core Tarball.Cloudera Parcel .Full Tarball .Full R ...

  4. 【转载】Linux下makefile详解--跟我一起写 Makefile

    概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...

  5. MakeFile 详解

    最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...

  6. Makefile详解

    原文链接:https://blog.csdn.net/qq_38646470/article/details/79917494 专栏链接:https://blog.csdn.net/column/de ...

  7. Linux环境下的make和makefile详解

    无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以将大型 ...

  8. Makefile详解 (转--不错就是有点长)

    概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,make ...

  9. (5)Makefile详解

         Makefile是一个自动化的编译工具,关系到整个工程的编译规则,极大的提高了软件开发的效率.     (1)Makefile的编译规则 //Makefile 也可以写作 makefile1 ...

随机推荐

  1. [PHP] 编译构建最新版PHP源码

    获取最新PHP代码git clone https://git.php.net/repository/php-src.git构建编译环境apt-get install build-essential 编 ...

  2. 11、ABPZero系列教程之拼多多卖家工具 拼团提醒功能页面实现

    上一篇讲解了拼团提醒逻辑功能实现,现在继续实现页面功能. Core项目 打开AbpZeroTemplate-zh-CN.xml语言文件,在末尾添加如下代码: 文件路径:D:\abp version\a ...

  3. UINavigationController 返回手势与 leftBarButtonItem

    UINavigationController 返回手势与 leftBarButtonItem UINavigationController 自带从屏幕左侧边缘向右滑动的返回手势,可以通过这个手势实现 ...

  4. 列表(List) 的增删改查及其他方法 和元组(tuple)的查

    一.列表 1.列表简介: 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li ...

  5. 【NOI2014】魔法森林

    为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为 1…n1…n,边标号为1…m1…m.初始时小E同学在 11 号节点,隐 ...

  6. 51Nod 1003 阶乘后面0的数量(数学,思维题)

    1003 阶乘后面0的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720 ...

  7. linphone-android-客户端APP-工程解读

    LinphoneLauncherActivity 是APP的入口组件,在这个组件里,它会启动LinphoneService这个后台服务,然后不断地判断这个后台服务是否已经启动完毕,如果已经启动完毕后, ...

  8. Spring学习日志之Spring MVC启动配置

    对DispatcherServlet进行配置 Spring MVC的配置实际上就是对DispatcherServlet的配置 public class DispatcherServletConfig ...

  9. 自制ZigBee协议分析仪

    关键词  ZigBee  Sniffer 协议  分析仪  自制  CC2530  CC2531 在开发ZigBee / Bluetooth的过程,难免会要用到Sniffer工具,Packet Sni ...

  10. 动态链接库(DLL)编写经验

    我首先说明DLL的生成方法,之后再补充一些特殊之处. 生成方法: 1.对需要导出的类,在头文件中添加 #ifdef CLASS _API #define CLASS_API _declspec(dll ...