代码之家  ›  专栏  ›  技术社区  ›  daniel.wirtz

CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND-LIBRARY_SUFIXES的默认值

  •  7
  • daniel.wirtz  · 技术社区  · 10 年前

    我想我在这里遗漏了一些非常明显的东西,但在我看来,cmake变量 CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES 根据当前系统/设置,未设置为任何“体面”默认值!我查看了cmake文档和谷歌,但似乎真的没什么。

    例如,一个简单的CMakeLists.txt本质上调用 find_package(OpenSSL REQUIRED) 除非在主文件中设置变量或直接调用 cmake -DCMAKE_FIND_LIBRARY_PREFIXES=lib -DCMAKE_FIND_LIBRARY_SUFFIXES=.so .. (在安装了openssl/libssl-dev的ubuntu上) 另一方面,目标的默认值PREFIX/SUFFIX为每个平台“正确”初始化,即使考虑到BUILD_SHARED_LIBS等,为什么不为find_library初始化?

    有人知道为什么/建议的(用户)行为应该是什么吗?

    2 回复  |  直到 10 年前
        1
  •  10
  •   user2288008 user2288008    10 年前

    cmake变量cmake_FIND_LIBRARY_PREFIXES/cmake_FIND-LIBRARY_SUFIXES未设置为任何“体面”默认值

    你为什么这么认为?例如:

    cmake_minimum_required(VERSION 3.1)
    project(Foo)
    
    message("prefix: ${CMAKE_FIND_LIBRARY_PREFIXES}")
    message("suffix: ${CMAKE_FIND_LIBRARY_SUFFIXES}")
    

    Linux(Ubuntu):

    prefix: lib
    suffix: .so;.a
    

    雨衣:

    prefix: lib
    suffix: .dylib;.so;.a
    

    Windows(Visual Studio):

    prefix:
    suffix: .lib
    

    除非在主文件中设置变量,否则调用find_package(OpenSSL REQUIRED)将中断

    刚刚测试过,对我来说很好。Ubuntu 14.04。CMake 2.8.12.2和CMake 3.1.0-rc2。

        2
  •  5
  •   daniel.wirtz    10 年前

    所以我会再次回答这个问题,因为我需要比评论允许的更多的空间。

    我错过的“显而易见的”是,我在调用“项目(Foo)”之前访问了这些值,并且在那个阶段 CMAKE_FIND_LIBRARY_PREFIXES CMAKE_FIND_LIBRARY_SUFFIXES 尚未初始化。 无论如何都很高兴知道!

    我正在检查是否可以构建主项目的条件,这包括检查cmake版本是否足够新,是否应该下载;在任何进一步的事情之前建立。另一方面,根据cmake约定,在发出任何项目命令之前,需要指定所需的最低版本。你看到那里的僵局了吗?因此,如果我需要在运行中构建一个更新的cmake版本,如果可能的话,应该包括OpenSSL。这是使用检测到的 find_package(OpenSSL) ,但它又访问了未初始化的 CMAKE_FIND_LIBRARY_prixes 一切都破碎了。