*通常自己安装的软件放在 /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. 10 - JavaSE之网络编程

    网络编程 网络通信协议分层思想 为什么要分层呢?因为整个网络协议非常复杂,要涉及到方方面面的知识,而且还有对底层硬件的操作,利用分层的思想,我们可以将复杂的通信协议分割成一层层的形式,上一层可以调用下 ...

  2. 51 Nod 1029 大数除法【Java大数乱搞】

    1029 大数除法 基准时间限制:4 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 给出2个大整数A,B,计算A / B和A Mod B的结果.   Input 第1行:大数A ...

  3. HDU1728-逃离迷宫-BFS

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. android新闻App源码、仿微信源码、地图音乐源码等

    Android精选源码 一款实用的休闲类App,新闻视频和技术应有尽有. android实现交互式K线图表源码 android新闻客户端和服务器源码 android MatetialDesign设计 ...

  5. UE4 字符串的转换

    创建Fstring: FString TestHUDString = FString(TEXT("This is my test FString.")); FString,FNam ...

  6. JS高级用法

    1.重复定时器 setTimeout(function() { // 处理中 setTimeout(arguments.callee, 1000); }, 1000) 这种模式链式调用了 setTim ...

  7. Tomcat服务器的下载及安装

    Tomcat服务器的下载及安装 1)到apache官网.www.apache.org     http://jakarta.apache.org(产品的主页) 2) 安装版:window (exe.m ...

  8. 从零开始学习前端开发 — 9、标签嵌套规则及CSS常用样式覆盖

    1. 块级元素可以包含内联元素或某些块级元素,但内联元素却不能包含块级元素,它只能包含其它的内联元素: <div><h1></h1><p></p& ...

  9. mysql中使用show table status 查看表信息

    学习标签: mysql 本文导读:在使用mysql数据库时,经常需要对mysql进行维护,查询每个库.每个表的具体使用情况,Mysql数据库可以通过执行SHOW TABLE STATUS命令来获取每个 ...

  10. Cannot declare class app\home\controller\Cases because the name is already in use

    Cannot declare class app\home\controller\Cases because the name is already in use 命名空间冲突了 use 模型类的时候 ...