如何预测CMake在给定平台上选择LIBDIR

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何预测CMake在给定平台上选择LIBDIR相关的知识,希望对你有一定的参考价值。

在我的应用程序套件中,我从源代码构建Libtiff,然后将其链接到我自己编写的应用程序。 Libtiff的CMakeLists.txt文件指定静态库进入库位置CMAKE_INSTALL_FULL_LIBDIR,由CMake的GNUInstallDirs选项确定。

当我第一次构建并测试我的应用程序时,我在Debian中这样做了,在这个平台上,CMAKE_INSTALL_FULL_LIBDIR被设置为$ {CMAKE_INSTALL_PREFIX} / lib。好又好,所以在我自己的应用程序的CMakeLists.txt文件中,我告诉它在那里搜索静态tiff库。没问题...

现在我将相同的构建套件用于Red Hat Linux平台(Pengwin Enterprise for WSL),结果发现这里CMAKE_INSTALL_FULL_LIBDIR设置为$ {CMAKE_INSTALL_PREFIX} / lib64。我检查了the CMake documentation,它似乎说实际上'lib'或'lib64'的选择是自动确定的,并且是平台相关的。

那么,在我自己的应用程序的CMakeLists.txt文件中,有没有办法找出它在我当前的平台上的位置?我怎么猜猜在哪里寻找图书馆?我看了一下但是我找不到一个CMAKE标准变量来保存与平台相关的字符串,所以我能想到的唯一的事情是:

  1. 尝试'lib',如果不起作用,请尝试'lib64'或
  2. 在我自己的CMakeLists.txt文件中创建一个新的CMAKE_INSTALL_FULL_LIBDIR并读取它的结尾

......但是这些看起来都很笨拙,而且肯定必须有更好的方法。

答案

GNUInstallDirs模块记录了CMAKE_INSTALL_LIBDIR变量,该变量听起来像包含您想要的值。

CMAKE_INSTALL_LIBDIR = lib
CMAKE_INSTALL_FULL_LIBDIR = /lib

find_library也应该在默认路径搜索中搜索liblib64,即使使用CMAKE_LIBRARY_PATH定义自定义前缀也是如此。

以上是关于如何预测CMake在给定平台上选择LIBDIR的主要内容,如果未能解决你的问题,请参考以下文章

如何告诉 CMake(通过 externalNativeBuild 调用)在哪里寻找库?

cmake交叉编译的使用

#ifdef DEBUG 与 CMake 独立于平台

CMake条件库链接取决于平台

使用 CMake 在面向 Linux 的 Windows 下跨平台构建

让 CMake 明确选择 MSVC 平台工具集