Вы можете использовать foreach для перебора исходных файлов и использовать функцию get_filename_component с NAME_WE, чтобы получить только имя файла, что-то вроде:
set(Script_srcs Module1.cpp Module2.cpp Module3.cpp )
foreach( f ${Script_srcs} )
get_filename_component( ff ${f} NAME_WE )
add_library( ${ff} SHARED ${f} )
endforeach( f )
Но вместо того, чтобы извлекать имена библиотек из имен файлов, почему бы не работать наоборот? Получите ваши имена файлов из желаемых имен модулей и добавьте ".cpp" в цикл for:
set( MyModules Module1 Module2 Module3 )
foreach( Mod ${MyModules} )
add_library( ${Mod} SHARED ${Mod}.cpp )
endforeach( Mod )