On 5. May, 2010, at 16:14 , Marc Weber wrote: > Hi, I'm new to cmake. > > I asked at #cmake how to prefix a string to a list of paths. > I got the reply that I should use a foreach loop which worked. > > Can I abstract this pattern using a macro such as this? > > > # prefix and suffix each element of list by ${prefix}elemnt${suffix} > macro(PREFIXSUFFIX list_name prefix suffix) > # create empty list - necessary? > SET(${list_name}_TMP) > > # prefix and suffix elements > foreach(l ${list_name}) > list(APPEND ${list_name}_TMP ${prefix}${l}${suffix} ) > endforeach() > > # replace list by tmp list > SET(${list_name} ${list_name}_TMP) > UNSET(${list_name}_TMP) > endmacro(PREFIXSUFFIX) > > > When running make I get something like: > > make[2]: *** No rule to make target > `/pr/tasks/terraView_trunk/build/cmake/UI_FILES_TMP', needed by > `UI_FILES_TMP.h'. Stop. > > > So what's the missing piece I don't understand yet? > > Sincerely > Marc Weber
In your last SET your setting the variable to the temporary list name, not its contents. Use this instead: SET(${list_name} "${${list_name}_TMP}") Also, you might consider turning the whole thing into a function instead. This has the advantage of having a local scope. You pass the result back by using PARENT_SCOPE in the last SET command. HTH Michael _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake