[CMake] How to write a correct wrapper of MESSAGE()?

Clark WANG dearvoid at gmail.com
Tue Oct 8 23:33:26 EDT 2013


On Sat, Oct 5, 2013 at 1:38 AM, Matthew Woehlke <matthew.woehlke at kitware.com
> 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>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20131009/0497da17/attachment.htm>


More information about the CMake mailing list