我正在开发一个由许多二进制文件,脚本和库组成的应用程序。在目前的开发中,我已在我的存储库中构建并运行:
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,但不处理我链接库的问题。