make-makeinstall作用

本文详细介绍了使用GNU的AUTOCONF和AUTOMAKE生成程序安装步骤的方法,包括configure、make、makeinstall命令的作用及使用技巧,以及如何通过参数控制安装过程。

这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。

./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。
make是用来编译的,它从Makefile中读取指令,然后编译。
make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

AUTOMAKE和AUTOCONF是非常有用的用来发布C程序的东西。

-----
1、configure,这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure –prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。

2、make,这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。

3、make insatll,这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。

-----
Linux的用户可能知道,在Linux下安装一个应用程序时,一般先运行脚本configure,然后用make来编译源程序,在运行make install,最后运行make clean删除一些临时文件。使用上述三个自动工具,就可以生成configure脚本。运行configure脚本,就可以生成Makefile文件,然后就可以运行make、make install和make clean。

configure是一个shell脚本,它可以自动设定源程序以符合各种不同平台上Unix系统的特性,并且根据系统叁数及环境产生合适的Makefile文件或是C的头文件(header file),让源程序可以很方便地在这些不同的平台上被编译连接。

这时,就可运行configure脚本了,运行configure脚本,就可产生出符合GNU规范的Makefile文件了:
$ ./configure

到此时,就可以运行make进行编译,在运行make install进行安装了,最后运行make clean删除临时文件。
$ make
$ make install           (注:运行这个要有足够的权限)
$ make clean

利用configure所产生的Makefile文件有几个预设的目标可供使用,其中几个重要的简述如下:

make all:产生我们设定的目标,即此范例中的可执行文件。只打make也可以,此时会开始编译原始码,然后连结,并且产生可执行文件。

make clean:清除编译产生的可执行文件及目标文件(object file,*.o)。

make distclean:除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。

make install:将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径。如果用bin_PROGRAMS宏的话,程序会被安装至/usr/local/bin这个目录。

make dist:将程序和相关的档案包装成一个压缩文件以供发布。执行完在目录下会产生一个以PACKAGE-VERSION.tar.gz为名称的文件。 PACKAGE和VERSION这两个变数是根据configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定义。在此范例中会产生test-1.0.tar.gz的档案。

make distcheck:和make dist类似,但是加入检查包装后的压缩文件是否正常。这个目标除了把程序和相关文件包装成tar.gz文件外,还会自动把这个压缩文件解开,执行 configure,并且进行make all 的动作,确认编译无误后,会显示这个tar.gz文件可供发布了。这个检查非常有用,检查过关的包,基本上可以给任何一个具备GNU开发环境-的人去重新编译。

### 如何正确使用 `make -j16` 和 `sudo make install` 在构建和安装软件的过程中,可以利用多核处理器的优势来加速编译过程。具体来说,可以通过设置 `-jN` 参数让 `make` 同时运行多个作业(其中 N 是并发的任务数),从而显著缩短编译时间。 以下是关于如何正确使用 `make -j16` 进行多线程编译以及通过 `sudo make install` 安装软件的详细说明: #### 多线程编译 当执行 `make` 命令时,默认情况下它会按顺序逐个处理目标文件。为了充分利用现代计算机中的多核心 CPU 资源,可以在调用 `make` 时指定 `-j` 参数[^4]。参数后的数值表示允许的最大并行任务数量。例如: ```bash make -j16 ``` 上述命令会让 `make` 尝试同时启动最多 16 个进程进行编译工作。通常建议将该值设为系统可用逻辑核心的数量或稍高一点以获得最佳性能[^2]。 需要注意的是,如果硬件资源不足而强行增加过多的并行度,则可能导致内存交换或其他瓶颈问题反而降低效率[^3]。 #### 使用超级用户权限安装 成编译后,通常需要把生成的目标文件复制到系统的标准目录下才能正常使用这些新安装的应用程序或库文件。由于涉及到修改受保护路径的操作,因此这一步骤往往要求具备管理员级别的访问权限。为此,在执行 `make install` 的时候应当加上 `sudo` 来提升当前 shell session 的特权等级: ```bash sudo make install ``` 这样做的原因是某些关键位置如 `/usr/local/bin`, `/lib`, 或者其他全局共享区域只有 root 用户才有写入许可权利;如果没有足够的权限就可能会遭遇类似于“Permission denied”的错误消息提示。 另外值得注意的一点是,尽管前面提到过可以用较高的并行级别加快整个流程的速度(`make -jX`) ,但在实际做最后阶段即真正意义上的部署动作之前还是推荐单独分开来做这两步操作——先正常模式下的常规编译再切换至更高优先级去实施最终确立环节[`sudo make install`]以免因中途出现问题影响整体稳定性[^1]。 ```bash mkdir build && cd build cmake .. make -j16 # 利用多线程快速编译 sudo make install # 提升权限成安装 ``` 以上就是整的从配置环境变量直至成功装载所需组件的方法论概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值