首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES的默认值

CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES的默认值
EN

Stack Overflow用户
提问于 2015-01-28 14:04:16
回答 2查看 8.5K关注 0票数 7

我想我在这里遗漏了一些非常明显的东西,但在我看来,cmake变量CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES并没有根据当前的系统/设置而设置为任何“像样的”默认值!我检查了cmake文档和google,但似乎并没有真正的内容。

例如,一个简单的CMakeLists.txt (本质上调用find_package(OpenSSL REQUIRED) )将中断,除非您在主文件中设置变量或直接调用cmake -DCMAKE_FIND_LIBRARY_PREFIXES=lib -DCMAKE_FIND_LIBRARY_SUFFIXES=.so .. (在ubuntu /libssl安装上);另一方面,对于每个平台,目标的缺省值前缀/后缀都是“正确”初始化的,甚至考虑到BUILD_SHARED_LIBS等等,为什么find_library不这样做呢?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-31 15:24:21

没有将cmake变量CMAKE_FIND_LIBRARY_PREFIXES/CMAKE_FIND_LIBRARY_SUFFIXES设置为任何“体面”默认值。

你为什么这么想呢?例如:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.1)
project(Foo)

message("prefix: ${CMAKE_FIND_LIBRARY_PREFIXES}")
message("suffix: ${CMAKE_FIND_LIBRARY_SUFFIXES}")

Linux (Ubuntu):

代码语言:javascript
复制
prefix: lib
suffix: .so;.a

麦克:

代码语言:javascript
复制
prefix: lib
suffix: .dylib;.so;.a

Windows (Visual ):

代码语言:javascript
复制
prefix:
suffix: .lib

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

刚刚测试过了,对我来说很好。Ubuntu 14.04CMake 2.8.12.2和CMake 3.1.0Rc2.

票数 10
EN

Stack Overflow用户

发布于 2015-02-01 10:52:47

因此,我将再次回答这个问题,因为我需要更多的空间,超出评论允许。

我忽略的“一些显而易见的事情”是,我在调用"project(Foo)“之前访问了这些值,并且在那个阶段还没有初始化CMAKE_FIND_LIBRARY_PREFIXESCMAKE_FIND_LIBRARY_SUFFIXES。很高兴知道在任何情况下!

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28194215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档