Linux/Unix'make install'应包含哪些内容?

rwa*_*ace 25 unix linux installer makefile

我编写了一个C++程序(命令行,可移植代码),我试图在Windows版本的同时发布Linux版本.我写了一个makefile如下:

ayane: *.cpp *.h
    g++ -Wno-write-strings -oayane *.cpp

到目前为止已经足够直截了当; 但是我理解通常采取第二步安装make.所以当我把make:target放在makefile中时......应该将什么命令与它相关联?(如果可能的话,我更喜欢它适用于所有Unix系统以及Linux.)

dmc*_*kee 38

安装

一个不那么简单的安装程序会将几个东西复制到位,首先确保存在适当的路径(使用mkdir -p或类似).通常是这样的:

  • 可执行文件进入 $INSTALL_PATH/bin
  • 任何为外部消费而建的图书馆都会进入$INSTALL_PATH/lib$INSTALL_PATH/lib/yourappname
  • $INSTALL_PATH/share/man/man1如果合适,man页面会进入,可能还有其他部分
  • 其他文档进入 $INSTALL_PATH/share/yourappname
  • 默认配置文件进入 $INSTALL_PATH/etc/yourappname
  • 其他链接的标题进入 $INSTALL_PATH/include/yourappname

安装路径

INSTALL_PATH是构建系统的输入,通常默认为/usr/local.这使您的用户可以灵活地在$ HOME下安装而无需提升权限.

在最简单的情况下使用

INSTALL_PATH?=/usr/local
Run Code Online (Sandbox Code Playgroud)

在makefile的顶部.然后,用户可以通过在shell中设置环境变量来覆盖它.

卸载

您偶尔也会看到make install构建清单以帮助卸载的s.清单甚至可以写成脚本来完成工作.

另一种方法就是有一个make uninstall查找事物make install位置的方法,如果它们存在则删除它们.

  • "make install"应该是唯一需要root权限的步骤,这一点也很重要. (3认同)
  • 一个(不太受尊重的约定)是使用DESTDIR作为登台目录的名称,并安装在$(DESTDIR)$(前缀)中,其中在配置期间定义了前缀,并且在make运行时设置了DESTDIR(通常是空). (2认同)