CMake中的$ORIGIN令牌是什么?

vptzau2j  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(139)

关于BUILD_RPATH_USE_ORIGIN的cmake文档页面提到了$ORIGIN令牌的存在,但没有解释它是什么或如何使用它。我似乎也找不到任何特定于此$ORIGIN令牌的在线资源。有人能给予我一个解释吗?

cedebl8k

cedebl8k1#

它与CMake没有什么特别的关系--更多的是与库加载器有关。一些平台将标记“$ORIGIN“视为特殊含义。
例如,引用ld.so手册页中名为“动态字符串标记”的部分:
$ORIGIN(或等效的${ORIGIN})这将扩展到包含程序或共享对象的目录。

gcc -Wl,-rpath,'$ORIGIN/../lib'

字符串
这样,无论somedir位于目录层次结构中的哪个位置,它都可以在somedir/lib中找到相关的共享对象。这有助于创建“交钥匙”应用程序,这些应用程序不需要安装到特殊目录中,而是可以解压缩到任何目录中,并且仍然可以找到自己的共享对象。
它提到了token在--library-path参数和LD_LIBRARY_PATHLD_PRELOADLD_AUDIT环境变量等上下文中的含义。
CMake的社区wiki也有一些关于它的内容-主要是相同的效果:
$ORIGIN:在Linux/Solaris上,指定任何RPATH设置可能是一个非常好的主意,它需要通过一个 * 相对 * 表达式来查找包的私有库的位置,这样就不会失去提供一个 * 完全可重定位 * 包的能力。这就是$ORIGIN的用途。在CMAKE_INSTALL_RPATH行中,它的美元符号应该用一个反斜杠转义,这样在最终的可执行文件中才能有正确的语法。
然后继续讨论在其他平台上做同样事情的机制。
如果你想要一些其他的使用技巧,请参阅Craig Scott's talk "Deep CMake for Library Authors" at ~t=49:30,其中也谈到了其他平台上的其他机制。
支持$ORIGIN的平台包括(但不一定限于)Linux和Solaris。

相关问题