gpt4 book ai didi

string - CMake 整数比较不起作用

转载 作者:行者123 更新时间:2023-12-02 04:27:40 25 4
gpt4 key购买 nike

我正在尝试使用 CMake 来检查系统是否安装了 xsltproc ,并且它来自 libxslt 版本 1.1.27 或更高版本。 (早期版本中存在一个我不想解决的错误。)

当您运行 xsltproc --version 时,您会得到如下输出:

Using libxml 20900, libxslt 10128 and libexslt 817
xsltproc was compiled against libxml 20900, libxslt 10128 and libexslt 817
libxslt 10128 was compiled against libxml 20900
libexslt 817 was compiled against livxml 20900

我编写了这个 CMake 代码来解析第一行中的第二个整数,并尝试将其与 10127 进行比较,这应该告诉我是否有足够新的版本 xsltproc :

execute_process(COMMAND xsltproc --version
OUTPUT_VARIABLE XSLTPROC_VERSION ERROR_QUIET)
if(XSLTPROC_VERSION)
string(REGEX MATCH "libxslt [0-9]+" LIBXSLT_VERSION
${XSLTPROC_VERSION})
if(LIBXSLT_VERSION LESS 10127) # Always succeeds! Why?
message(STATUS "xsltproc found, but it's too old!")
else()
message(STATUS "xstlproc found, and new enough")
set(WORKING_XSLTPROC 1)
endif()
endif(XSLTPROC_VERSION)

问题是,无论我在 LIBXSLT_VERSION 中得到什么值,测试总是成功的。当我在发出上面第一个引用 block 的系统上运行它时,它应该成功,但随后我尝试将测试值增加到 10129 以说服自己它会走上失败路径,但事实并非如此!后来我在一个libxslt 1.1.17的系统上运行它,它也运行成功了。

我尝试过使用 GREATER 10126VERSION_LESS 等翻转逻辑(即 STRLESS )。我还尝试将裸整数切换为字符串,取消引用变量名称,以便它是直接的字符串与字符串比较等等。没有任何帮助。

我主要使用 CMake 2.6 和 2.8。

最佳答案

这看起来像是正则表达式处理的问题。

当您调用时:

string(REGEX MATCH "libxslt [0-9]+" LIBXSLT_VERSION ${XSLTPROC_VERSION})

LIBXSLT_VERSION 的值将为 libxslt 10128不是裸版本 10128


您可以通过将正则表达式修改为“libxslt ([0-9]+)”来仅捕获版本号,并在变量CMAKE_MATCH_1中引用捕获的匹配项( CMAKE_MATCH_0 包含完整匹配;相当于此处的 ${LIBXSLT_VERSION},即 libxslt 10128)。

因此,您应该能够执行以下操作:

if(XSLTPROC_VERSION)
string(REGEX MATCH "libxslt ([0-9]+)" LIBXSLT_VERSION ${XSLTPROC_VERSION})
if(NOT CMAKE_MATCH_1)
message(AUTHOR_WARNING "Error during check for xslt version.")
elseif(CMAKE_MATCH_1 LESS 10127)
message(STATUS "xsltproc found, but it's too old!")
else()
message(STATUS "xstlproc found, and new enough")
set(WORKING_XSLTPROC 1)
endif()
endif()

关于string - CMake 整数比较不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25796059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com