[En-Nut-Discussion] Make hides compiler command lines

Harald Kipp harald.kipp at egnite.de
Wed Jul 4 09:56:18 CEST 2012


Hi Ulrich,

On 03.07.2012 22:36, Ulrich Prinz wrote:
 
> the intention of that hiding was simple: Overview.
...
> The silencing was only a side effect of finding all the points where a 
> new compiler has to be added in the Makefiles. I remember that I 
> collected all the tools in one file and defined them there.
> I replaced all bla-blub-gcc by $(GCC) and all rm by $(RM), bla-blub-ld 
> by $(LD) and so on.
> 
> So silencing was only a simple thing
> GCC=$(CROSS_COMPILE)gcc
> is printing every call and a @ in front
> GCC=@$(CROSS_COMPILE)gcc
> avoids that printing something.

But unfortunately it is not done that way. Instead we have

Makerules.gcc:  @$(CC) -MM $(CPPFLAGS) $(CFLAGS) -o $@ $<
Makerules.gcc:  @$(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
Makerules.gcc:  @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $<
Makerules.gcc:  @$(AS) -c $(CPPFLAGS) $(ASFLAGS) -o $@ $<
Makerules.gcc:  @$(AR) $(ARFLAGS) $@ $?

plus

Makerules.all:  @-rm -f $(SRCS:.c=.bak)
Makerules.all:  @-rm -f $(SRCS:.c=.c~)
Makevars.all:CP = @cp
Makevars.gcc:AR     = @$(TRGT)ar
Makevars.gcc:CP     = @cp
Makevars.gcc:RM     = @rm -f

Still no big deal to change them, but I have to do this after each checkout.


> The way to suppress the messages by compiling inside (q)nutconf was not 
> an option as the 16 nut/os based projects part of one big project and 
> are build from scripts (including the option to build the all at once)

How about using

 make >NUL

in your script? Btw. if using scripts, you can do more. The Lua script that builds the Windows distribution, collects all errors with some additional information in a special log. As an example (trying to build the current trunk):

------------------------------------------------------------------------
Target : lisa-cm3-gccdbg-app
Command: SET PATH=e:\ethernut\nut-trunk\nut\tools\win32;%ProgramFiles(x86)%\yagarto\bin;e:\apps\bin;%SystemRoot%\system32;%SystemRoo
t%;%SystemRoot%\System32\Wbem;&make clean all install
Error  : 2
------------------------------------------------------------------------
"  [CC] caltime.c"
caltime.c: In function 'main':
caltime.c:406:5: warning: implicit declaration of function 'NutRegisterRtc' [-Wimplicit-function-declaration]
caltime.c:406:25: error: 'rtcLpc17xx' undeclared (first use in this function)
caltime.c:406:25: note: each undeclared identifier is reported only once for each function it appears in
caltime.c:411:9: warning: implicit declaration of function 'NutRtcGetStatus' [-Wimplicit-function-declaration]
caltime.c:412:24: error: 'RTC_STATUS_PF' undeclared (first use in this function)
make[1]: *** [caltime.o] Error 1
make[1]: Leaving directory `E:/ethernut/ethernut-5.0.5/lisa-cm3-gccdbg-app/caltime'
make: *** [all] Error 2


------------------------------------------------------------------------
Target : mbed_npx_lpc1768-cm3-gcc-app
Command: SET PATH=e:\ethernut\nut-trunk\nut\tools\win32;%ProgramFiles(x86)%\yagarto\bin;e:\apps\bin;%SystemRoot%\system32;%SystemRoo
t%;%SystemRoot%\System32\Wbem;&make clean all install
Error  : 2
------------------------------------------------------------------------
make[1]: Leaving directory `E:/ethernut/ethernut-5.0.5/mbed_npx_lpc1768-cm3-gcc-app/uart'
make -C caltime
make[1]: Entering directory `E:/ethernut/ethernut-5.0.5/mbed_npx_lpc1768-cm3-gcc-app/caltime'
"  [CC] caltime.c"
caltime.c: In function 'main':
caltime.c:379:24: error: 'devUart0' undeclared (first use in this function)
caltime.c:379:24: note: each undeclared identifier is reported only once for each function it appears in
make[1]: *** [caltime.o] Error 1
make[1]: Leaving directory `E:/ethernut/ethernut-5.0.5/mbed_npx_lpc1768-cm3-gcc-app/caltime'
make: *** [all] Error 2


------------------------------------------------------------------------
Target : mbed_npx_lpc1768-cm3-gccdbg-app
Command: SET PATH=e:\ethernut\nut-trunk\nut\tools\win32;%ProgramFiles(x86)%\yagarto\bin;e:\apps\bin;%SystemRoot%\system32;%SystemRoo
t%;%SystemRoot%\System32\Wbem;&make clean all install
Error  : 2
------------------------------------------------------------------------
make[1]: Leaving directory `E:/ethernut/ethernut-5.0.5/mbed_npx_lpc1768-cm3-gccdbg-app/uart'
make -C caltime
make[1]: Entering directory `E:/ethernut/ethernut-5.0.5/mbed_npx_lpc1768-cm3-gccdbg-app/caltime'
"  [CC] caltime.c"
caltime.c: In function 'main':
caltime.c:379:24: error: 'devUart0' undeclared (first use in this function)
caltime.c:379:24: note: each undeclared identifier is reported only once for each function it appears in
make[1]: *** [caltime.o] Error 1
make[1]: Leaving directory `E:/ethernut/ethernut-5.0.5/mbed_npx_lpc1768-cm3-gccdbg-app/caltime'
make: *** [all] Error 2

This gives a nice overview about all unsolved problems. Of course you could do something similar with DOS batch files or shell scripts.

As a side effect of the "@" silencing, this script also does no longer list the command line, which sometimes contained valuable informations, specifically when adding new devices.


> Btw. I added "make burn" as a second 'programming' target. It simply 
> programs without recompiling anything, what is helpful if you just need 
> to test your things on a series of targets.

Do you remember, where you needed to add this? Just curious, because I'm using "make burn" (without recompiling) for years.

Regards,

Harald




More information about the En-Nut-Discussion mailing list