Re: [CMake] How is ARGN passed to a macro

2018-11-21 Thread Torsten Robitzki
Hi Andreas,

> Am 21.11.2018 um 20:18 schrieb Andreas Naumann :
> 
> I think the behavior is explained in [1] and [2]. In particular the second 
> section of [2] states that the parameter " [...] such as ARGN are not 
> variables in the usual CMake sense. They are string replacements [...]".  And 
> the example at the end of [2] seems to match your test perfectly.

yes, but what puzzles me, is that I can’t print ${ARGN} in the macro (but in 
the function) but I can loop over it. That seems to be somehow strange to me.

Anyhow, thanks a lot and as long as this behavior is defined and (most likely) 
stays this way, I can work with it :-)

regards,

Torsten



signature.asc
Description: Message signed with OpenPGP
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake


Re: [CMake] How is ARGN passed to a macro

2018-11-21 Thread Andreas Naumann

Hey Torsten,

Am 21.11.18 um 13:15 schrieb Torsten Robitzki:

Hi,
I’ve stumbled over following behavior and now I’m searching for the rules, that 
explains that behavior:

test.cmake:

   macro(check_argn)
 message("in macro check_argn ARGN: ${ARGN}")

 if(ARGN)
   foreach(item IN LISTS ARGN)
 message("ARG: ${item}")
   endforeach(item)
   message("ARGN: ${ARGN}")
 endif()
   endmacro()

   function(f1 a)
 message("in function ARGN: ${ARGN}")
 check_argn()
   endfunction()

   f1(1)
   f1(1 2)

This will yield the following output:

   $ cmake -P ./test.cmake
   in function ARGN:
   in macro check_argn ARGN:
   in function ARGN: 2
   in macro check_argn ARGN:
   ARG: 2
   ARGN:

I would expect ARGN to behave exactly the same in the macro, as in the 
function, but apparently there is a difference. Can someone of you explain that 
to me?


I think the behavior is explained in [1] and [2]. In particular the 
second section of [2] states that the parameter " [...] such as ARGN are 
not variables in the usual CMake sense. They are string replacements 
[...]".  And the example at the end of [2] seems to match your test 
perfectly.


Hope that helps a bit,
Andreas

[1] https://cmake.org/cmake/help/latest/command/function.html

[2] https://cmake.org/cmake/help/latest/command/macro.html



TIA and kind regards,

Torsten



--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake


[CMake] How is ARGN passed to a macro

2018-11-21 Thread Torsten Robitzki
Hi,
I’ve stumbled over following behavior and now I’m searching for the rules, that 
explains that behavior:

test.cmake:

  macro(check_argn)
message("in macro check_argn ARGN: ${ARGN}")

if(ARGN)
  foreach(item IN LISTS ARGN)
message("ARG: ${item}")
  endforeach(item)
  message("ARGN: ${ARGN}")
endif()
  endmacro()

  function(f1 a)
message("in function ARGN: ${ARGN}")
check_argn()
  endfunction()

  f1(1)
  f1(1 2)

This will yield the following output:

  $ cmake -P ./test.cmake 
  in function ARGN: 
  in macro check_argn ARGN: 
  in function ARGN: 2
  in macro check_argn ARGN: 
  ARG: 2
  ARGN: 

I would expect ARGN to behave exactly the same in the macro, as in the 
function, but apparently there is a difference. Can someone of you explain that 
to me?

TIA and kind regards,

Torsten
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake