gudge
gudge

Reputation: 1073

nmake appending to variables

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.

Upvotes: 8

Views: 7010

Answers (2)

Lothar
Lothar

Reputation: 13085

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".

Upvotes: 2

Jonathan Leffler
Jonathan Leffler

Reputation: 754490

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)

Upvotes: 6

Related Questions