应用程序的标准linux`make install`,链接到正确的库

时间:2015-04-24 11:51:24

标签: linux installation makefile

我正在开发一个由许多二进制文件,脚本和库组成的应用程序。在目前的开发中,我已在我的存储库中构建并运行:

myapp:
    bin/
    include/
    lib/
    scripts/
    src/
    Makefile

src/包含多个模块的代码,libs或二进制文件。每个人都有自己的文件。

make运行myapp/为目标安装目录设置环境变量,然后在make install中为每个子模块递归运行src/(使用环境变量)。 / p>

这会在myapp/的相关子目录中安装二进制文件,包含文件和库,因为这是环境变量的设置方式。

现在我想要在系统范围内安装,大概是在/usr/local。我也有兴趣在开发过程中保持在myapp/本地构建和安装的能力。能够在myapp/bin/中运行二进制文件而不必先在系统上安装它们是很方便的。

我的第一个计划是保留默认make目标,在myapp下创建可安装程序(二进制文件,库,包含,脚本),然后在{{1}中创建一个新的install目标这将在myapp/Makefile中复制这些可安装程序(需要/usr/local/)。

我的问题是,在开发过程中,二进制文件需要知道lib的位置。我一直在使用sudo链接到myapp/lib/中的库。但是,这不适合系统安装的二进制文件,而应改为-Wl,-rpath=/path/to/myapp/lib

我可以看到几个解决方案,但没有一个很好:

  • /usr/local/lib/使用make install而不是/usr/local中设置的环境变量目标目录重建而不是仅复制。缺点:我认为整个重建过程需要myapp/,而不仅仅是安装。
  • 删除与sudo的关联,而是在开发过程中将-Wl,-rpath设置为包含LD_LIBRARY_PATH,但不是。显然这是considered harmful。当我想在系统范围内运行时,我很容易忘记取消它,并且会错误地使用本地库。
  • 删除与myapp/lib的链接,并要求在-Wl,-rpath中本地构建二进制文件之前安装系统库。这很麻烦,我希望能够克隆我的仓库并在一步中本地构建。

其他人可能遇到过这个问题,我想知道是否有标准解决方案。

This was interesting,但不处理我链接库的问题。

0 个答案:

没有答案