On Mon, 2011-01-17 at 10:28 -0800, givemecode wrote: > I saw this question was posted but never answered on this forum. Hopefully > this can be done: > > I have code in a makefile that creates a new file called "allheaders.h" > which includes ALL the headers, and is intended to verify they compile: > > allheaders.h $(HEADER) > @for f in $(HEADER) ; do echo "#include \""$$f"\"" >> $@ ; done > > where HEADER is just a bunch of header files inside the include directory: > > HEADER = include/a.h > HEADER += include/b.h > HEADER += include/c.h > ... > > How do I do something similar to grep in the for loop, so as not to include > the "include/" part of the header rule? > > For instance, I currently have this inside my allheaders.h file: > > #include "include/a.h" > #include "include/b.h" > #include "include/c/h" > .... > > > but I want just: > > #include "a.h" > #include "b.h" > ... > > > they are essential the same but I would like it to be the second list. > thanks!!
I'm not sure what you want exactly. I reference to grep, the tool would be sed, but I'm not sure that's waht you actually want. Does this do what you want?: allheaders.h: $(HEADER) @for f in $(patsubst include/%,%,$(HEADER)); do \ echo "#include \"$$f\""; \ done > '$@' This could be done using sed, but doing it inside make is more efficient, and a bit simpler. Also, you were over-complicating shell quotation. Also, you can capture the output of the entire for loop, so it only has to open allheaders.h for writing once. -- ~ LukeShu http://lukeshu.ath.cx/ _______________________________________________ Help-make mailing list Help-make@gnu.org http://lists.gnu.org/mailman/listinfo/help-make