CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES的默认值

dan*_*rtz 4 platform cmake prefix defaults

我想我错过了一些非常明显的东西,但在我看来,cmake变量CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES没有设置为任何"体面"的默认值,具体取决于当前的系统/设置!我已经检查了cmake docs和谷歌,但它似乎没有任何关于它.

例如,find_package(OpenSSL REQUIRED)除非你在主文件中设置变量或直接调用cmake -DCMAKE_FIND_LIBRARY_PREFIXES=lib -DCMAKE_FIND_LIBRARY_SUFFIXES=.so ..(在ubuntu w openssl/libssl-dev上安装),否则基本上调用的简单CMakeLists.txt 将会中断,目标的默认值PREFIX/SUFFIX被初始化"正确"为每个平台,甚至考虑BUILD_SHARED_LIBS等为什么不为find_library?

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

小智 7

cmake变量CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES未设置为任何"正常"默认值

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

cmake_minimum_required(VERSION 3.1)
project(Foo)

message("prefix: ${CMAKE_FIND_LIBRARY_PREFIXES}")
message("suffix: ${CMAKE_FIND_LIBRARY_SUFFIXES}")
Run Code Online (Sandbox Code Playgroud)

Linux(Ubuntu):

prefix: lib
suffix: .so;.a
Run Code Online (Sandbox Code Playgroud)

苹果电脑:

prefix: lib
suffix: .dylib;.so;.a
Run Code Online (Sandbox Code Playgroud)

Windows(Visual Studio):

prefix:
suffix: .lib
Run Code Online (Sandbox Code Playgroud)

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

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


dan*_*rtz 5

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

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

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