我正在尝试将两条路径连接起来:
SET(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}/inkscape")
但是当CMAKE_INSTALL_LIBDIR
包含绝对路径时,字符串连接并不能真正解决这个问题。
是否有一个CMake函数,可以将多个路径参数合并,将右侧相对路径添加到最右侧的绝对路径中,就像Python的os.path.join
函数一样?
以下是Python解释器展示所需行为的示例:
>>> from os.path import join
>>> join("/foo/bar", "/baz/qux")
'/baz/qux'
>>> join("foo/bar", "/baz/qux")
'/baz/qux'
>>> join("/foo/bar", "./baz/qux")
'/foo/bar/./baz/qux'
>>> join("/foo/bar", "../baz/qux")
'/foo/bar/../baz/qux'
>>> join("./foo/bar", "baz/qux")
'./foo/bar/baz/qux'
我需要处理两种情况,一种是前缀为绝对路径的情况(例如CMAKE_INSTALL_PREFIX
),另一种是前缀为相对路径的情况(例如$ORIGIN/..
或${prefix}
,这通常在pkg-config
文件中需要)。同时,我还需要处理使用相对路径CMAKE_INSTALL_LIBDIR
和使用绝对路径的Linux发行版。
CMAKE_INSTALL_PREFIX
是绝对路径,CMAKE_INSTALL_LIBDIR
也是(大多数情况下)。为什么不直接使用${CMAKE_INSTALL_LIBDIR}/foo
呢?请参考https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html。 - JustinCMAKE_INSTALL_LIBDIR
大多数情况下不是绝对的。你提供的文档举例说明:“在Debian上,lib
或lib64
或lib/<multiarch-tuple>
”。作为一个发行包维护者,我遇到的很多软件项目都假定未加后缀_FULL
的CMAKE_INSTALL_xxx
是相对路径。 - Jan Tojnar