Index: cmake/modules/SingleMultiSource.cmake =================================================================== --- cmake/modules/SingleMultiSource.cmake +++ cmake/modules/SingleMultiSource.cmake @@ -24,7 +24,9 @@ get_property(registered_executables GLOBAL PROPERTY registered_executables) string(REGEX REPLACE ".[cp]+$" "" path ${main_src}) - string(REGEX REPLACE ".*/" "" name ${path}) + get_filename_component(name ${path} NAME ) + get_filename_component(dir ${path} DIRECTORY) + list(FIND registered_executables ${name} name_idx) if(${name_idx} EQUAL -1) @@ -35,9 +37,11 @@ # There is a clash. Rename the target. Each time around the loop pull in # a new path component. - foreach(n RANGE 1 4) - string(REGEX REPLACE ".*/([^/]+/${name})" "\\1" name ${path}) - string(REGEX REPLACE "/" "-" safe_name ${name}) + while(dir) + get_filename_component(next_name ${dir} NAME) + get_filename_component(next_dir ${dir} DIRECTORY) + set(safe_name "${next_name}-${name}") + set(dir ${next_dir}) list(FIND registered_executables ${safe_name} name_idx) if(${name_idx} EQUAL -1) @@ -45,7 +49,7 @@ set_property(GLOBAL APPEND PROPERTY registered_executables ${safe_name}) return() endif() - endforeach() + endwhile() message(FATAL_ERROR "Failed to uniquify executable name!") endfunction()