CMake中两个字符串的最大公共前缀

时间:2016-08-29 10:18:36

标签: cmake

我需要使用CMake找到两个字符串的最大公共前缀。我还没有找到任何关于使用CMake的内容。 CMake本身非常有限,所以我想知道最好的方法。

1 个答案:

答案 0 :(得分:0)

查找最大公共前缀通常是在两个字符串开头的O(n)线性搜索中完成的。 CMake允许使用if command和LESS / GREATER / ..比较数字和字符串。这允许实现查找最大公共前缀的标准方法:

function( largest_common_prefix a b prefix )

# minimum of lengths of both strings
string( LENGTH ${a} len_a )
string( LENGTH ${a} 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()