You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何CMake中未定义的MBEDTLS变量会被赋值为NOTFOUND?

关于CMake中MBEDTLS相关变量的疑问

我创建了一个空的CMake项目,并添加了以下代码:

message(WARNING "Non existent var = ${NON_EXISTENT_VAR}")
message(WARNING "MBEDTLS INCLUDE DIR = ${MBEDTLS_INCLUDE_DIR}")
message(WARNING "MBEDTLS_LIBRARY = ${MBEDTLS_LIBRARY}")
message(WARNING "MBEDX509_LIBRARY = ${MBEDTLS_LIBRARY}")
message(WARNING "MBEDCRYPTO_LIBRARY = ${MBEDTLS_LIBRARY}")

执行后得到如下输出:

[cmake] CMake Warning at CMakeLists.txt:40 (message):
[cmake]   Non existent var =
[cmake] 
[cmake] 
[cmake] CMake Warning at CMakeLists.txt:41 (message):
[cmake]   MBEDTLS INCLUDE DIR = MBEDTLS_INCLUDE_DIR-NOTFOUND
[cmake] 
[cmake] 
[cmake] CMake Warning at CMakeLists.txt:42 (message):
[cmake]   MBEDTLS_LIBRARY = MBEDTLS_LIBRARY-NOTFOUND
[cmake] 
[cmake] 
[cmake] CMake Warning at CMakeLists.txt:43 (message):
[cmake]   MBEDX509_LIBRARY = MBEDTLS_LIBRARY-NOTFOUND
[cmake] 
[cmake] 
[cmake] CMake Warning at CMakeLists.txt:44 (message):
[cmake]   MBEDCRYPTO_LIBRARY = MBEDTLS_LIBRARY-NOTFOUND

疑问解答

  • MBEDTLS_LIBRARY这类变量不是CMake自动定义的。你看到的XXX-NOTFOUND是CMake的特殊标记:当调用find_package(MbedTLS)、find_library或find_path这类查找命令但未找到目标时,CMake会将对应变量设置为XXX-NOTFOUND,标记查找失败。
  • 你的空项目里没手动调用查找命令,但可能是CMake内置模块、或者环境中的全局配置脚本触发了相关查找逻辑,导致这些变量被创建并赋值为NOTFOUND。
  • CMake本身不会自动为常见软件包预定义变量,只有显式调用查找命令时才会创建对应变量。未被定义的变量(比如NON_EXISTENT_VAR)在输出时会是空值,这和被标记为NOTFOUND的变量有明显区别。
  • 另外注意代码中的笔误:MBEDX509_LIBRARY和MBEDCRYPTO_LIBRARY都错误引用了${MBEDTLS_LIBRARY},所以它们的输出和MBEDTLS_LIBRARY一致,这是代码写法错误导致的,并非变量本身的问题。

内容的提问来源于stack exchange,提问作者Zebrafish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:38:13