CMake列表首元素与预期值对比失败问题求助
问题原因及解决办法
核心错误:CMake变量名是区分大小写的,你通过
list(GET)定义的变量是全大写的MAJOR,但在if判断里误用了首字母大写的Major,这两个是完全独立的变量,所以判断条件永远不成立。修正后的基础代码:
# Get python installation details find_package(Python3 REQUIRED COMPONENTS Interpreter Development NumPy) # Create a list from the numpy version string(REPLACE "." ";" VERSION_LIST ${Python3_NumPy_VERSION}) # Get the first element list(GET VERSION_LIST 0 MAJOR) # Create variable set(MY_VARIABLE "1") # now do comparison if (MAJOR STREQUAL MY_VARIABLE) Message("Numpy OK") else() Message(FATAL_ERROR "Wrong version of numpy found, please install version 1.26 upwards") endif()
- 更优的版本检查方案:你实际需要的是检查NumPy版本是否≥1.26,手动拆分版本号的方式既繁琐又容易出错,建议直接用CMake自带的版本比较语法:
find_package(Python3 REQUIRED COMPONENTS Interpreter Development NumPy) if (Python3_NumPy_VERSION VERSION_LESS "1.26") Message(FATAL_ERROR "Wrong version of numpy found, please install version 1.26 upwards") else() Message("Numpy OK") endif()
这种方式不需要手动处理版本拆分,CMake会自动解析版本字符串并完成比较,逻辑更准确也更简洁。
内容的提问来源于stack exchange,提问作者RoachFIsher
相关产品推荐
相关产品推荐

