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

如何预测CMake';s在给定平台上选择LIBDIR,cmake,libtiff,pengwin,pengwin-enterprise,Cmake,Libtiff,Pengwin,Pengwin Enterprise,在我的应用程序套件中,我从源代码构建Libtiff,然后将其链接到我自己编写的应用程序。Libtiff的CMakeLists.txt文件指定静态库进入库位置CMAKE_INSTALL_FULL_LIBDIR,由CMAKE的GNUInstallDirs选项确定 当我第一次构建和测试我的应用程序时,我是在Debian中这样做的,在这个平台上,CMAKE_INSTALL_FULL_LIBDIR设置为${CMAKE_INSTALL_PREFIX}/lib。很好,所以在我自己的应用程序的CMakeList

在我的应用程序套件中,我从源代码构建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。我已经检查过了,它似乎说事实上,“lib”或“lib64”的选择是自动确定的,并且依赖于平台

那么,在我自己的应用程序的CMakeLists.txt文件中,有没有办法找出它在我当前的平台上?不然我怎么能猜到图书馆在哪里?我四处查看了一下,但找不到包含平台相关字符串的CMAKE标准变量,因此我能想到的只有:


  • 试试“lib”,如果不行,试试“lib64”,或者
  • 在我自己的CMakeLists.txt文件中创建一个新的CMAKE_INSTALL_FULL_LIBDIR并读取其结尾
  • …但这两个变量看起来都很不雅观,肯定有更好的方法。

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

    CMAKE_INSTALL_LIBDIR = lib
    CMAKE_INSTALL_FULL_LIBDIR = /lib
    

    此外,即使使用
    CMAKE\u library\u path
    定义自定义前缀,也应根据需要在默认路径搜索中搜索
    lib
    lib64

    “尝试“lib”,如果不起作用,请尝试“lib64”,或者”-我已经看到几个使用给定方法的项目。是的,就是这样。正如我通常在阅读CMake文档时的经历一样,单独阅读时一点也不清楚;但是,在得到这个提示并在互联网上查找了一些使用示例之后,很明显,这就是解决方案。