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_PREFIXES
和 CMAKE_FIND_LIBRARY_SUFFIXES
尚未初始化。
无论如何都知道!
我正在检查是否可以构建主项目的条件,这涉及检查 cmake 版本是否足够新,是否应该在进一步操作之前下载和构建。另一方面,根据 cmake 惯例,您需要在发出任何项目命令之前指定所需的最低版本。你看到那里的僵局了吗?因此,如果我需要即时构建更新的 cmake 版本,则应尽可能包含 OpenSSL。这是使用 find_package(OpenSSL)
检测到的,但它又访问了未初始化的 CMAKE_FIND_LIBRARY_PREFIXES
并且一切都坏了。
我想我在这里遗漏了一些非常明显的东西,但在我看来,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_PREFIXES
和 CMAKE_FIND_LIBRARY_SUFFIXES
尚未初始化。
无论如何都知道!
我正在检查是否可以构建主项目的条件,这涉及检查 cmake 版本是否足够新,是否应该在进一步操作之前下载和构建。另一方面,根据 cmake 惯例,您需要在发出任何项目命令之前指定所需的最低版本。你看到那里的僵局了吗?因此,如果我需要即时构建更新的 cmake 版本,则应尽可能包含 OpenSSL。这是使用 find_package(OpenSSL)
检测到的,但它又访问了未初始化的 CMAKE_FIND_LIBRARY_PREFIXES
并且一切都坏了。