我需要使用 CMake 找到两个字符串的最大公共前缀。我还没有使用 CMake 找到任何有关它的信息。 CMake 本身非常有限,所以我想知道最好的方法。
查找最大公共前缀通常是通过从两个字符串的开头开始的 O(n) 线性搜索来完成的。 CMake 允许使用 if 命令 和 LESS/GREATER/.. 比较数字和字符串。这允许实现查找最大公共前缀的标准方法:
function( largest_common_prefix a b prefix )
# minimum of lengths of both strings
string( LENGTH ${a} len_a )
string( LENGTH ${b} len_b )
if( ${len_a} LESS ${len_b} )
set( len ${len_a} )
else()
set( len ${len_b} )
endif()
# iterate over the length
foreach( end RANGE 1 ${len} )
# get substrings
string( SUBSTRING ${a} 0 ${end} sub_a )
string( SUBSTRING ${b} 0 ${end} sub_b )
# if equal store, otherwise break
if ( ${sub_a} STREQUAL ${sub_b} )
set( ${prefix} ${sub_a} PARENT_SCOPE )
else()
break()
endif()
endforeach()
endfunction()