[CMake] Don't understand simple code

Michael Wild themiwi at gmail.com
Mon May 18 11:08:19 EDT 2009


On 11. May, 2009, at 18:38, Tyler Roscoe wrote:

> On Mon, May 11, 2009 at 09:03:37AM -0700, Denis Scherbakov wrote:
>> MACRO(MYTEST argTemp)
>>  LIST(LENGTH argTemp varLen)
>>  MESSAGE("Len: ${varLen}")
>>
>>  SET (argTemp "${argTemp}")
>>
>>  LIST(LENGTH argTemp varLen)
>>  MESSAGE("Len: ${varLen}")
>> ENDMACRO ()
>>
>> MYTEST("something;new")
>>
>> # prints: 0, 2
>>
>> Am I referring variables in MACRO correctly? Why second version  
>> prints correct length and the first - not?
>
> Not entirely sure, but perhaps this is because (from the macro()  
> docs):
>
> "Note that the parameters to a macro and values such as ARGN are not
> variables in the usual CMake sense. They are string replacements much
> like the c preprocessor would do with a macro. If you want true CMake
> variables you should look at the function command."
>
> tyler

If I do

MYTEST(something;new)

i.e. without the quotes, I get

Len: 2
Len: 1


I think in your example (where you use the quotes) the problem is that  
argTemp IS a single string which gets literally replace at every  
occurrence of argTemp as Tyler mentioned.

Michael


More information about the CMake mailing list