我正在尝试使用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
,测试总是成功的。当我在发出上面第一个引用块的系统上运行它时,它应该成功了,但是我尝试将测试值增加到 10129 以说服自己它会沿着失败路径走下去,但它没有!我后来在一个libxslt
1.1.17 的系统上运行它,它也跑到了成功的道路上。
我已经尝试翻转逻辑(即GREATER 10126
),使用VERSION_LESS
andSTRLESS
等。我还尝试将裸整数切换为字符串,取消引用变量名,因此它是直接的字符串到字符串比较等。没有任何帮助。
我主要使用 CMake 2.6 和 2.8。