CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES 的默认值

Default values for CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES

我想我在这里遗漏了一些非常明显的东西,但在我看来,cmake 变量 CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES 未设置为任何 "decent" 默认值,具体取决于当前 system/settings!我已经检查了 cmake 文档和 google,但似乎什么都没有。

例如,除非您在主文件中设置变量或直接调用 cmake -DCMAKE_FIND_LIBRARY_PREFIXES=lib -DCMAKE_FIND_LIBRARY_SUFFIXES=.so ..(在 ubuntu w openssl/libssl-dev已安装) 另一方面,目标的默认值 PREFIX/SUFFIX 为每个平台初始化 "correctly",甚至考虑 BUILD_SHARED_LIBS 等。为什么不为 find_library?

有谁知道 why/what 建议的(用户)行为应该是什么?

cmake variables CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES are not set to any "decent" default value

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

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

Mac:

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

Windows (Visual Studio):

prefix:
suffix: .lib

calling find_package(OpenSSL REQUIRED) will break unless you set the variables in your main file

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

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

我错过的 "something obvious" 是我在调用 "project(Foo)" 之前访问了这些值,并且在那个阶段 CMAKE_FIND_LIBRARY_PREFIXESCMAKE_FIND_LIBRARY_SUFFIXES 尚未初始化。 无论如何都知道!

我正在检查是否可以构建主项目的条件,这涉及检查 cmake 版本是否足够新,是否应该在进一步操作之前下载和构建。另一方面,根据 cmake 惯例,您需要在发出任何项目命令之前指定所需的最低版本。你看到那里的僵局了吗?因此,如果我需要即时构建更新的 cmake 版本,则应尽可能包含 OpenSSL。这是使用 find_package(OpenSSL) 检测到的,但它又访问了未初始化的 CMAKE_FIND_LIBRARY_PREFIXES 并且一切都坏了。