avr-chat
[Top][All Lists]
Advanced

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

Re: [avr-chat] Need a make guru; embedding web pages


From: David Kelly
Subject: Re: [avr-chat] Need a make guru; embedding web pages
Date: Wed, 31 Aug 2011 22:58:27 -0500

On Aug 31, 2011, at 9:06 PM, Rick Mann wrote:

> 
> On Aug 30, 2011, at 12:41 , David Kelly wrote:
> 
>> I think I'd put the WebFileTOC in a .c and define an empty extern
>> WebFileTOC in the .h. You really don't want memory allocation occurring
>> in a .h as you show above.
> 
> I agree, and would like to eventually incorporate that change.

Its a small change. Just split your (WEBHEADER) target in two like this:

WEBHEADER = web.h
WEB_C     = web.c

$(WEBHEADER) : $(HTML) $(CSS) $(PNG) #$(HTMLOBJS) $(CSSOBJS) $(PNGOBJS)
        for f in $(^F); do \
                ff=$${f/./_}; \
                echo "extern const char" $${ff}"[];" >> $(WEBHEADER); \
                echo "extern const char" $${ff}_end"[];" >> $(WEBHEADER); \
        done; \
        echo "extern const WebFileTOC sWebTOC; >> $(WEBHEADER);

$(WEB_C) : $(HTML) $(CSS) $(PNG)
        echo "#include \"$(WEBHEADER)\"\n" >> $(WEB_C); \
        echo "WebFileTOC sWebTOC = {" >> $(WEB_C); \
        for f in $(^F); do \
                ff=$${f/./_}; \
                echo "{ \"$${f}\", $${ff}, $${ff}_end }," >> $(WEB_C); \
        done; \
        echo "};\n" >> $(WEB_C);

>> Then in your Makefile add a pattern rule:
>> 
>> %.html : %.o
>>      avr-objcopy -B elf $< $@
>> 
>> Perhaps rename your files to index_html.html, error_html.html, and
>> main_css.html so as to get something close to the names you have used
>> above.
> 
> I guess I wasn't clear enough. I actually have a rule like that, and the file 
> you see was actually generated by my Makefile. The problem is that it doesn't 
> properly handle the dependencies. I want a change in a .html to result in the 
> web.h being re-built, and then any code that includes web.h being recompiled. 
> 
> Maybe I just need to ensure that these rules are the first to execute in the 
> Makefile?

Order shouldn't matter to anything but determination of the default target. You 
don't show your default target but web.h has to be listed as a build dependency.

Once again I think you need a web.c to hold the memory allocation. Add it to 
your .c source list so that it will be built. Also add this so that make knows 
web.o depends on web.h:

web.o : web.c web.h

You need similar for anything that uses web.h because they too need to be 
rebuilt if web.h changes. You might let the compiler build a dependency tree 
for you in Makefile format. I used this in one of my AVR projects. IIRC it was 
copied from another project I was doing in FreeBSD where one has BSD make and 
sometimes GNU make, which differ in how this is handled. Believe this almost 
finds common ground:

depend: clean $(SRCS)
        $(CC) -E -M $(SRCS) > .depend

# BSD make automatically reads .depend if it exists, but GNU needs to be told.
# -include fails silently in GNU Make if .depend does not exist
# -include is not BSD Make compatible and will fail fatally. Comment out, not 
needed.
-include .depend

The .depend file produced lists *all* dependancies tracking every #include 
recursively through your system to the very end.

--
David Kelly N4HHE, address@hidden
========================================================================
Whom computers would destroy, they must first drive mad.






reply via email to

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