【make】make、make install 、clean和uninstall的区别|make install 定安装路径

目录

简单概括

详细说明

扩展说明

make install 时指定安装路径

简略

详细


简单概括

make仅编译;make install编译并安装;make clean删除临时文件

  • ./configure检测安装平台的目标特征。如:是否有CC或GCC,源代码安装的第一步,对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,它是个shell脚本。

  • make是编译的,从Makefile中读取指令,然后编译。

  • make install  从Makefile中读取指令install代表的指令,执行安装。

详细说明

1、configure

生成 Makefile,为编译做准备,可以在 configure 后加上参数,比如代码:./configure --prefix=/usr,意思是将该软件(bin,lib,include)安装在 /usr 下面。

同时配置文件安装目录可通过 --sys-config= 参数进行设定。

还可以加上 --with、--enable、--without、--disable 等等参数对编译加以控制,你可以通过允许 ./configure --help 察看详细的说明帮助。

2、make

编译。make 的作用是开始进行源代码编译,以及一些功能的提供,这些功能由 Makefile 设置文件提供相关的功能,比如 make install 一般表示进行安装,make uninstall 是卸载,不加参数就是默认的进行源代码编译。

3、make install  和make uninstall 

从Makefile中读取指令install代表的指令,执行安装,例如makefile 中设定的install是:

……
install:
    install -d $(bindir)
    install -m 0755 hello  $(bindir)
……

make install 就是去执行下面两条命令

    install -d $(bindir)

    install -m 0755 hello  $(bindir)

这里的install 是linux系统命令,用法自己去查。

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

make uninstall 同理

uninstall:
     rm $(bindir)/hello

扩展说明

makefile 中支持这四个命令:make,make install ,make clean和make uninstall_sxf_0123的博客-CSDN博客_makefile中install

利用configure所产生的Makefile文件有几个预设的目标 动作 可供使用:

  make all:编译Makefile中all设定的目标,即此范例中的可执行文件。只打make 默认就是make all,只编译其中某个目标则在后面给目标名称:make  ceph-common。

例如:Makefile如下

.PHONY: image flashcard put-files
put-files:
    @echo "=== put-files"
image:
    @echo "=== image"
flashcard:
    @echo "=== flashcard"
all: put-files image flashcard
    @echo "Done"

make  put-files  就是只编译put-files 这个目标,make all 就是编译 put-files、 image、 flashcard

  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 install 时指定安装路径

简略

prefix默认是/usr/local
make install 和make install prefix=/usr/local/ 等价,都是安装到

/usr/local/bin

/usr/local/lib

/usr/local/include

make install prefix=/usr/,是安装到

/usr/bin

/usr/lib

/usr/include

DESTDIR是指定一个目录,让make install按安装目录的树形结构放置进去,比如:
make install prefix=/usr/local/ DESTDIR=/tmp/build,则编译生成的文件会被放置在:

/tmp/build/usr/local/bin/

/tmp/build/usr/local/lib

/tmp/build/usr/local/include

详细

当我们从github中下载一个开源软件(或者库),通常需要“三连”(./configure && make && make install )安装(使用cmake或其他指定编译安装命令的除外)

假设有如下规则:

install:

cp aaa $(bindir)/aaa

cp bbb $(sysconfdir)/bbb

根据GCS的规定,prefix默认是 /usr/local, bindir通常是被定义为 ,通常被定义为(prefix)/etc

如果打算把aaa安装到 /usr/local/bin ,而把bbb安装到 /etc , 这样:

make install sysconfdir=/etc

如果打算把aaa安装到 /tmp/build/usr/local/bin/ ,bbb安装到 /tmp/build/etc 目录下

make install prefix=/usr/local/ sysconfdir=/etc DESTDIR=/tmp/build

支持DESTDIR 的意义就是,保证所有要安装的文件,都会被安装在DESTDIR目录下,不会污染系统的packager的目录。还可以直接把DESTDIR作为rpm build的目录,根据spec文件的描述,把临时目录中的文件拷贝出来生成RPM包。

Page 50:

----------------------------------------------------------------------------------------------------

%install

make prefix=/usr DESTDIR=%BUILDROOT install

----------------------------------------------------------------------------------------------------


You may be wondering why the prefix variable couldn’t provide this

functionality. For one thing, not every path in a system-level installation is

defined relative to the prefix variable. The system configuration directory

(sysconfdir), for instance, is often defined as /etc by packagers. You can see

in Table 2-1 that the default definition of sysconfdir is $(prefix)/etc, so the

only way sysconfdir would resolve to /etc would be if you explicitly set it to do

so on the configure or make command line. If you configured it that way, only

a variable like DESTDIR would affect the base location of sysconfdir during

staged installation. Other reasons for this will become clearer as we talk

about project configuration later on in this chapter, and then again in the

next two chapters.

————————————————


原文链接:https://blog.csdn.net/AlxRose/article/details/7756222

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开发环境-的人去重新编译。

原文链接:https://blog.csdn.net/u012060033/article/details/105134757

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值