如何在 CMake 或 make 之外获取 GNU 安装目录的名称?
How to get the name of GNU install directories outside of CMake or make?
我正在使用 CMake 安装由 GNUInstallDirs 定义的软件,而 GNUInstallDirs 又应该遵循 these standards。
事实证明,这些在分布中并不完全统一,但是 - libdir
在 ubuntu 下变为 lib
,而在 alpine 下它解析为 lib64
.
我需要以可移植的方式在 CMake 之外引用这些目录 - 具体来说,我在 bash 脚本中添加了一个包含 libdir
到 $PYTHONPATH
的路径。
如何在 bash 中的当前系统上找到 libdir
正在解析的实际目录名称?
模块 GNUInstallDirs
在 lib
和 lib64
之间选择的标准在模块本身中是 described:
# Override this default 'lib' with 'lib64' iff:
# - we are on Linux system but NOT cross-compiling
# - we are NOT on debian
# - we are on a 64 bits system
# reason is: amd64 ABI: https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI
# For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if
# CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"
# and CMAKE_INSTALL_PREFIX is "/usr"
# See http://wiki.debian.org/Multiarch
在一个简单的形式中,您的 Python 脚本可以检查:
- 是否在 64 位上运行Linux。
- 是否在基于 Debian 的操作系统上运行。
如果第一个检查为真而第二个为假,则 libdir
为 lib64/
。
否则 libdir
是 lib/
.
另类。正在搜索图书馆
您的脚本可以检查 lib/
或 lib64/
是否包含特定的库,对于 $PYTHONPATH
选择实际包含库的目录。
这种方法有一个优点,它可以安全地防止 GNUInstallDirs
模块中 select 在 lib/
和 lib64/
之间更改规则。
另类。使用有关安装目录的信息运送您的安装
安装项目时,您还可以创建一个包含 CMAKE_INSTALL_FULL_LIBDIR
变量值的文件,因此可以通过 Python 脚本提取该值。至于包含此信息的文件,它可以存储在预定义的目录下:例如datarootdir
始终是 share/
.
这种方法有一个优点,即使 libdir
的值不同于 lib/
和 lib64/
。
要添加 的其他选项:
Return CMake 按需提供的目录名
在引用安装路径时,我们可以通过打印CMake本身的变量来获取具体目录:
echo "include(GNUInstallDirs)\nmessage(${CMAKE_INSTALL_LIBDIR})\n" > /tmp/gnuinstall &&
cmake -P /tmp/gnuinstall
我正在使用 CMake 安装由 GNUInstallDirs 定义的软件,而 GNUInstallDirs 又应该遵循 these standards。
事实证明,这些在分布中并不完全统一,但是 - libdir
在 ubuntu 下变为 lib
,而在 alpine 下它解析为 lib64
.
我需要以可移植的方式在 CMake 之外引用这些目录 - 具体来说,我在 bash 脚本中添加了一个包含 libdir
到 $PYTHONPATH
的路径。
如何在 bash 中的当前系统上找到 libdir
正在解析的实际目录名称?
模块 GNUInstallDirs
在 lib
和 lib64
之间选择的标准在模块本身中是 described:
# Override this default 'lib' with 'lib64' iff:
# - we are on Linux system but NOT cross-compiling
# - we are NOT on debian
# - we are on a 64 bits system
# reason is: amd64 ABI: https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI
# For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if
# CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"
# and CMAKE_INSTALL_PREFIX is "/usr"
# See http://wiki.debian.org/Multiarch
在一个简单的形式中,您的 Python 脚本可以检查:
- 是否在 64 位上运行Linux。
- 是否在基于 Debian 的操作系统上运行。
如果第一个检查为真而第二个为假,则 libdir
为 lib64/
。
否则 libdir
是 lib/
.
另类。正在搜索图书馆
您的脚本可以检查 lib/
或 lib64/
是否包含特定的库,对于 $PYTHONPATH
选择实际包含库的目录。
这种方法有一个优点,它可以安全地防止 GNUInstallDirs
模块中 select 在 lib/
和 lib64/
之间更改规则。
另类。使用有关安装目录的信息运送您的安装
安装项目时,您还可以创建一个包含 CMAKE_INSTALL_FULL_LIBDIR
变量值的文件,因此可以通过 Python 脚本提取该值。至于包含此信息的文件,它可以存储在预定义的目录下:例如datarootdir
始终是 share/
.
这种方法有一个优点,即使 libdir
的值不同于 lib/
和 lib64/
。
要添加
Return CMake 按需提供的目录名
在引用安装路径时,我们可以通过打印CMake本身的变量来获取具体目录:
echo "include(GNUInstallDirs)\nmessage(${CMAKE_INSTALL_LIBDIR})\n" > /tmp/gnuinstall &&
cmake -P /tmp/gnuinstall