bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Warnings on '$\\'


From: Martin Dorey
Subject: Re: Warnings on '$\\'
Date: Sat, 15 Apr 2023 01:18:24 +0000

> Without the '$\\' syntax, I get everything on one line

I didn't understand that until I'd tried it.  With just \ as line ending, the G_TRACE macro definition ends up on one line.  With \\ as line ending, it ends up with \\ as line ending.  With $\\ as line ending, it ends up with \, line you'd want.

How can I avoid that?

This seems to work:

martind@sirius:~/tmp/vanem-2023-04-14$ cat Makefile
g_trace.h: Makefile; $(file > $@,$(trace_h))

\ = \

define trace_h
  #define G_TRACE(level, fmt, ...)                  $\\
          do {                                      $\\
            if (_g_trace_level() >= level) {        $\\
               _g_trace_color (TRACE_COLOUR_START); $\\
  # ....
endef
martind@sirius:~/tmp/vanem-2023-04-14$ make --warn-undefined-variables; cat g_trace.h; rm g_trace.h
make: 'g_trace.h' is up to date.
  #define G_TRACE(level, fmt, ...)                  \
          do {                                      \
            if (_g_trace_level() >= level) {        \
               _g_trace_color (TRACE_COLOUR_START); \
  # ....
martind@sirius:~/tmp/vanem-2023-04-14$ 

It works with:

\ =

... too but not with:

\ = \\

... nor with:

A = \

... nor with A set to nothing or A or whatever.  That's with:

martind@sirius:~/tmp/vanem-2023-04-14$ make --version
GNU Make 4.4.0.91


From: bug-make-bounces+martin.dorey=hds.com@gnu.org <bug-make-bounces+martin.dorey=hds.com@gnu.org> on behalf of Gisle Vanem <gvanem@yahoo.no>
Sent: Friday, April 14, 2023 02:38
To: bug-make <bug-make@gnu.org>
Subject: Warnings on '$\\'
 
***** EXTERNAL EMAIL *****

In a makefile I have the need to generate a
multi-line C-macro (for use in Glib):

g_trace.h: Makefile
   $(file > $@,$(trace_h))

define trace_h
   #define G_TRACE(level, fmt, ...)                  $\\
           do {                                      $\\
             if (_g_trace_level() >= level) {        $\\
                _g_trace_color (TRACE_COLOUR_START); $\\
   # ....
endef

Without the '$\\' syntax, I get everything on one line
which I'd rather not want. With the '$\\' endings, g_trace.h
is perfect.

But with 'MAKEFLAGS += --warn-undefined-variables', I get a
bunch of warnings:
   'reference to undefined variable '\''

How can I avoid that?
I read upon '.WARNINGS', but fail to see how to use that in this case.

--
--gv


reply via email to

[Prev in Thread] Current Thread [Next in Thread]