[CMake] Passing Function Arguments

Ryan Pavlik rpavlik at iastate.edu
Thu Jul 8 04:46:10 EDT 2010

  function (wcl _fileName _varName)
   set(out 0)
   file(READ "${_fileName}" fileData)
     string(REGEX MATCHALL "\n" lines "${fileData}")
     list(LENGTH lines out)
   set(${+varName} ${out} PARENT_SCOPE)

Key parts you missed: "lines" (now _varName) contains a variable name 
when you enter the function, so to set the value of that variable, you 
need to set the value of ${lines}; must set with PARENT_SCOPE since a 
function opens a new scope; don't re-use variables if you want to be 
able to read your code in the future; it's a nice habit to put a _ in 
front of incoming variable names, for readability.

Hope this helps!


On 7/8/10 3:35 AM, Johny wrote:
> I am trying to write a cmake function which imitates the functionality 
> of wc -l for unix. However i can't seem to be able to figure out how 
> to store the result into the variable which is passed  to the function.
> function (wcl fileName lines)
>   file(READ ${fileName} fileData)
>   if(fileData)
>     string(REGEX MATCHALL "\n" lines ${fileData})
>     list(LENGTH lines lines)
>   endif(fileData)
> endfunction()
> i call the function as
> wcl (${fileName} fileLen)
> and printing it gives no output
> message("${fileLen}")
> What am i doing wrong ?
> Regards
> Johny
> _______________________________________________
> 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

Ryan Pavlik
Human-Computer Interaction Graduate Student
Virtual Reality Applications Center
Iowa State University

rpavlik at iastate.edu

More information about the CMake mailing list