Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

nmake appending to variables

Tags:

makefile

nmake

  • Utility: NMake
  • Platform : Windows 7

I have the following Makefile

FILE = $(shell) *.c
FILE += $(shell) *.cpp

exec:
    @echo $(FILE)

This works perfectly fine with make. This throws up the following error with nmake

makefile(2) : fatal error U1036: syntax error : too many names to left of '='
Stop.

What could be the reason?

Without the line

FILE += $(shell) *.cpp

nmake works perfectly fine.

like image 329
gudge Avatar asked Mar 24 '12 00:03

gudge


2 Answers

The += syntax is a GNU Make extension that was pioneered in Sun's make in the late 80s. It is not part of the syntax for POSIX standard make, or the original AT&T make.

If you use extensions, you get caught when you switch to a system that doesn't support them. You either have to rework things (hard) or stick with the original system.


One way to modify the file to work with nmake is probably:

FILE1 = $(shell) *.c
FILE2 = $(shell) *.cpp
FILE  = $(FILE1) $(FILE2)

exec:
    @echo $(FILE)

Or, given that the macro shell is not defined, even:

FILE1 = *.c
FILE2 = *.cpp
FILE  = $(FILE1) $(FILE2)

exec:
    @echo $(FILE)
like image 83
Jonathan Leffler Avatar answered Oct 16 '22 21:10

Jonathan Leffler


Instead of

FILE = $(shell) *.c
FILE += $(shell) *.cpp

you must use

FILE = $(shell) *.c
FILE = $(shell) *.cpp $(FILE)

The expansion strategy is different from nmake and make. nmake expands all before starting evaluating the rules while make does it just in times when needed and because this gives problems it has the two flavours of expansion as described in the info pages.

I personally like nmake's way better. And by the way, use "jom" instead of "nmake".

like image 21
Lothar Avatar answered Oct 16 '22 22:10

Lothar