On Sat, Oct 5, 2013 at 1:38 AM, Matthew Woehlke <[email protected]
> wrote:
> On 2013-09-27 04:18, Clark WANG wrote:
>
>> I'm trying to write some MESSAGE() wrappers like info(), warning(),
>> fatal(), etc which may be a bit easier to use. But I failed to simulate
>> the
>> correct MESSAGE() behavior no matter I use MACRO or FUNCTION. For example:
>> [snip]
>>
>
> FUNCTION vs MACRO shouldn't make a difference in argument parsing AFAIK.
> The difference is primarily that FUNCTION creates a scope, while MACRO
> operates in the scope from which it is called.
>
> The behavior of MESSAGE seems to concatenate multiple arguments with no
> separators. So maybe you could do something like:
>
> set(msg "")
> foreach(part IN LISTS ARGN)
> set(msg "${msg}{$part}")
> endforeach()
> # ...do stuff with ${msg}
>
This does not work either. For example:
$ cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
FUNCTION(info_f)
set(msg "")
foreach(part IN LISTS ARGN)
set(msg "${msg}${part}")
endforeach()
message("[info_f] ${msg}")
ENDFUNCTION()
MACRO(info_m)
set(msg "")
foreach(part IN LISTS ARGN)
set(msg "${msg}${part}")
endforeach()
message("[info_m] ${msg}")
ENDMACRO()
message("foo;bar")
info_f("foo;bar")
info_m("foo;bar")
$ cmake .
foo;bar
[info_f] foobar
[info_m]
$
>
> (I like ARGN since it is 'unnamed positional arguments'. Since you have no
> named arguments, ARGV == ARGN, but generally speaking I can't think of why
> you'd ever need to use ARGV.)
>
Good point.
>
> --
> Matthew
>
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/**CMake_FAQ<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<http://cmake.org/cmake/help/support.html>
> CMake Consulting:
> http://cmake.org/cmake/help/**consulting.html<http://cmake.org/cmake/help/consulting.html>
> CMake Training Courses:
> http://cmake.org/cmake/help/**training.html<http://cmake.org/cmake/help/training.html>
>
> Visit other Kitware open-source projects at http://www.kitware.com/**
> opensource/opensource.html<http://www.kitware.com/opensource/opensource.html>
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/**listinfo/cmake<http://www.cmake.org/mailman/listinfo/cmake>
>
--
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:
http://www.cmake.org/mailman/listinfo/cmake