为什么使用 ${OPENSSL_LIBRARIES} 不是现代 CMake?

问题描述 投票:0回答:1

鉴于此更改建议:

-  PUBLIC ${OPENSSL_LIBRARIES}
+  PUBLIC OpenSSL::SSL OpenSSL::Crypto

为什么使用

OpenSSL::SSL OpenSSL::Crypto
被认为是现代 CMake 而不是使用
OPENSSL_LIBRARIES
变量?

根据 FindOpenSSL 文档

OPENSSL_LIBRARIES
变量并未弃用,但 CMake 专家似乎同意它不是现代 CMake。

我在jimbo叔叔的指南中看到

“就是这样,现代 CMake 可以传递性地处理目标依赖项,这意味着您可以忘记混乱的变量,并且使用 libmodern 所需的每个属性都得到正确处理。”

但我很难理解为什么我们不再使用变量。仅仅是因为它们看起来很乱吗?

cmake
1个回答
0
投票

我们不使用变量,因为我们不知道设置了哪些变量,并且未设置的变量将扩展为空。

是 OPENSSL_LIBRARIES 或 OpenSSL_LIBRARIES 或 OPENSSL_LIB 或 OPENSSL_LIBS 还是...?对于像 openssl 这样的大包,它有很好的文档记录,但用户制作的包可以并且确实设置任何类型的变量并且不遵循任何约定。其实以前包里的变量名并没有约定,每个包都不一样。

缺少目标会导致错误,带有 :: 的内容必须是一个目标,而且一个目标在一个名称中包含所有内容 - cflags、ldflags、库、包含路径。如果您输入错误,则会出现错误。

© www.soinside.com 2019 - 2024. All rights reserved.