macro(filter_list inlist regex) set(outlist "") foreach(item ${${inlist}}) if(NOT ${outitem} ${item} MATCHES ${regex}) list(APPEND outlist ${item}) endif() endforeach() set(${inlist} ${outlist}) endmacro() set(mylist FILTER_THIS_BIT DO_NOT_FILTER_THIS thisisanitem FILTER_THIS_THING) message("mylist was: ${mylist}") filter_list(mylist "^FILTER_THIS_.+") message("mylist is: ${mylist}")