Solved

Makefile and standard includes

Posted on 2009-06-30
9
387 Views
Last Modified: 2013-11-13
Mornin' All

I'm sure this is dead easy but I can't figure it out. I use MarkDown to convert content text to html but MarkDown does not provide the appropriate "<html><head>...</head><body>" and "</body></html>" tags. A perfect automation job for make, thinks I.

Here's the make file I have at the moment. It works fine to build the final html file in general. The problem is that it doesn't trigger a rebuild when I change html_header.inc or html_footer.inc.

Any clues?

MYINC=$(HOME)\etc
VPATH=.:$(MYINC)

%.html : %.inc
   cat "$(MYINC)/html_header.inc" >> $@
   cat $<                         >> $@
   cat "$(MYINC)/html_footer.inc" >> $@

%.inc : %.txt
   /usr/local/bin/markdown.pl $< > $@

Thanks in advance.
0
Comment
Question by:chris_slee
  • 4
  • 3
  • 2
9 Comments
 
LVL 43

Expert Comment

by:ravenpl
ID: 24755203
- %.html : %.inc
+ %.html : %.inc $(MYINC)/html_header.inc $(MYINC)/html_footer.inc
will not work?
0
 

Author Comment

by:chris_slee
ID: 24757836
I figured that for the solution as well but, no, it doesn't work. make throws up this error:

"mixed implicit and static pattern rules. Stop.'"

My understanding is that implicit rules (whether built-in or user defined) must be of the format "%.html : %.inc" with no other dependencies listed. This is despite http://gnu.huihoo.org/make-3.77/html_chapter/make_10.html which says:

"%.o: %.c foo.h
        $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

which tells how to make `.o' files from `.c' files, and makes all `.o' files using this pattern rule also depend on `foo.h'. "
0
 
LVL 34

Expert Comment

by:Duncan Roe
ID: 24758740
What are your targets? Can you please post the entire Makefile (if very long, post as file e.g. Makefile.txt)
The problem with that line may be that the same file can match both kinds of patterns.
I tried guessing a target but can't reproduce the error you see

0
 

Author Comment

by:chris_slee
ID: 24759003
That is the entire makefile. That what puzzles me. I call it as

% make filename.html

and expect that it looks for filename.txt, checks whether it's newer then filename.html (if it exists) and builds as required.
Makefile.txt
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 43

Expert Comment

by:ravenpl
ID: 24760937
> "mixed implicit and static pattern rules. Stop.'"
what OS and make You use - it works perfectly at my side, try also (dependencies should summarize)

*.html : $(MYINC)/html_header.inc $(MYINC)/html_footer.inc
%.html : %.inc
...
0
 
LVL 34

Accepted Solution

by:
Duncan Roe earned 50 total points
ID: 24761787
Why do you have a backslash on line 1? $(HOME)\etc is not the same as =$(HOME)/etc which is a normal Unix pathname
20:09:29$ cat -A ee50.mf 

MYINC=$(HOME)$

VPATH=.:$(MYINC)$

$

all: ee50.html$

$

%.html : %.inc $(MYINC)/html_header.inc $(MYINC)/html_footer.inc$

^Icat "$(MYINC)/html_header.inc" >> $@$

^Icat $<                         >> $@$

^Icat "$(MYINC)/html_footer.inc" >> $@$

$

%.inc : %.txt$

^I/usr/local/bin/markdown.pl $< > $@$

20:08:49$ make -f ee50.mf xxx.html

make: *** No rule to make target `xxx.html'.  Stop.

Open in new window

0
 

Author Closing Comment

by:chris_slee
ID: 31598621
Holy cow! I've been looking at this for a week and have only seen this after it was pointed out. That's what you get for working in a mixed linux/Windows environment. Thank you very much. Works perfectly now.
0
 
LVL 43

Expert Comment

by:ravenpl
ID: 24770384
So that's it? Correcting the typo fixed Your problem?
0
 

Author Comment

by:chris_slee
ID: 24770412
You can't imagine what an idiot I feel or how much time I've sunk into this but, yes, correcting the typo fixed it. I've been in this game a long time and to be stumped by something this dumb is ... is .... well, I find it hard to believe. I really don't know how to apologise for wasting your time on something I should have been able to see at first glance.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Active Directory replication delay is the cause to many problems.  Here is a super easy script to force Active Directory replication to all sites with by using an elevated PowerShell command prompt, and a tool to verify your changes.
If you’re thinking to yourself “That description sounds a lot like two people doing the work that one could accomplish,” you’re not alone.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now