CMake整数比较不起作用

时间:2014-09-11 20:08:22

标签: string integer cmake comparison libxslt

我正在尝试使用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进行比较,告诉我是否有足够新版本的{{ 1}}:

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) 得到什么价值,测试总是成功的。当我在发出上面第一个引用块的系统上运行它时,它应该成功,但我然后尝试将测试值增加到10129以说服自己它会沿着故障路径走下去,但事实并非如此!我后来在LIBXSLT_VERSION 1.1.17的系统上运行它,它也沿着成功路径运行。

我尝试使用libxsltGREATER 10126等来翻转逻辑(即VERSION_LESS)。我也尝试将裸整数切换为字符串,取消引用变量名称,因此它是一个直接的字符串到字符串比较等。没有任何帮助。

我主要使用CMake 2.6和2.8。

1 个答案:

答案 0 :(得分:4)

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

致电时:

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

LIBXSLT_VERSION的值为libxslt 10128裸版10128


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

所以,你应该可以这样做:

libxslt 10128