bug-make
[Top][All Lists]
Advanced

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

Using $(eval) to get information at the time a target is invoked


From: Hsu, Shihchieh IAS
Subject: Using $(eval) to get information at the time a target is invoked
Date: Fri, 7 Jan 2011 20:46:21 -0500

Summary: Using $(eval) to get information at the time a target is invoked, but instead information gotten is when “make” is invoked.

 

                Problem occurs for make3.81 and make 3.82 on Windows XP

 

                However if makefile is modified to look for information in a subfolder then correct results are obtained.

 

                Equivalent makefile in Linux for 3.81 works correctly also

 

Folder contents:

 

D:\testEval>dir

Volume in drive D is Data

Volume Serial Number is 6AEC-315C

 

Directory of D:\testEval

 

01/07/2011  08:12 PM    <DIR>          .

01/07/2011  08:12 PM    <DIR>          ..

01/05/2011  11:31 AM                 0 Hello.c

01/07/2011  08:06 PM               321 makefile

01/05/2011  11:31 AM                 0 world.c

               3 File(s)            321 bytes

               2 Dir(s)   8,175,538,176 bytes free

 

D:\testEval>

 

Makefile contents:

 

SRC_DIR = ./

 

PROG_NAME = test

 

define PROGRAM_template

            $(1)_SRC_DIR   = $$(SRC_DIR)

            $(1)_SRC_FILES = $$(wildcard $$($(1)_SRC_DIR)*.c)

endef

 

$(eval $(call PROGRAM_template,$(PROG_NAME)))

 

clean:

            del hello.c

 

all:

            rem $(test_SRC_DIR)

            rem $(test_SRC_FILES)

            rem $(wildcard $(test_SRC_DIR)*.c)

 

Invocation

 

make clean all

 

Results:

 

D:\testEval>make clean all

del hello.c

rem ./

rem ./Hello.c ./world.c

rem ./Hello.c ./world.c

 

Expected Results:

 

del hello.c

rem ./

rem ./world.c

rem ./world.c

 

A makefile (makefile_sav) looking for files under a subfolder <test> works: (<test> contains hello.c and world.c files)

 

SRC_DIR = ./

 

PROG_NAME = test

 

define PROGRAM_template

            $(1)_SRC_DIR   = $$(join $$(SRC_DIR),$(1)/)

            $(1)_SRC_FILES = $$(wildcard $$($(1)_SRC_DIR)*.c)

endef

 

$(eval $(call PROGRAM_template,$(PROG_NAME)))

 

clean:

            del test\hello.c

 

all:

            rem $(test_SRC_DIR)

            rem $(test_SRC_FILES)

            rem $(wildcard $(test_SRC_DIR)*.c)

 

The output from this is:

 

G:\testEval>make -f makefile_sav clean all

del test\hello.c

rem ./test/

rem ./test/world.c

rem ./test/world.c

 

and it is correct.

 

I’ll be glad to send everything (just a few files) in a zip file.  Please advise.

 

Thanks,


SC Hsu

 

 

 

           


reply via email to

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