From Electron Cloud
| (2 intermediate revisions by the same user not shown) | |||
| Line 11: | Line 11: | ||
$(TARGET): .depend $(OBJECTS) | $(TARGET): .depend $(OBJECTS) | ||
| + | echo "#define BUILD_HOST \"`hostname -f`\"" > build_host.h | ||
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBPATH) $(LIBS) | $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBPATH) $(LIBS) | ||
$(STRIP) $(TARGET) | $(STRIP) $(TARGET) | ||
| Line 19: | Line 20: | ||
-include .depend | -include .depend | ||
| − | + | build_host.h: | |
| − | echo "#define | + | echo "#define BUILD_HOST \"`hostname -f`\"" > build_host.h |
clean: | clean: | ||
| Line 36: | Line 37: | ||
test: | test: | ||
echo $(OBJECTS) | echo $(OBJECTS) | ||
| + | </pre> | ||
| + | |||
| + | How to use build_host.h and generate a version message: | ||
| + | |||
| + | <pre> | ||
| + | #include "build_host.h" // created by Makefile | ||
| + | |||
| + | void print_version() | ||
| + | { | ||
| + | printf("This is Thingamajig version " VERSION | ||
| + | " built " __DATE__ " " __TIME__ " on " BUILD_HOST); | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | How to do arbitrary conversions with implicit rules: | ||
| + | <pre> | ||
| + | LOGS = $(wildcard *.log) | ||
| + | LOGPDFS = $(subst .log$,.pdf,$(LOGS)) | ||
| + | |||
| + | all: $(LOGPDFS) | ||
| + | |||
| + | %.pdf : %.log | ||
| + | process-log $< | ||
| + | mv output.pdf $@ | ||
</pre> | </pre> | ||
Latest revision as of 22:01, 21 April 2009
This is just a basic starting point for compiling a C project.
TARGET = theapp
SOURCES = $(wildcard *.c)
OBJECTS = $(subst .c$,.o,$(SOURCES))
HEADERS = $(wildcard *.h)
CC = gcc
LINK = gcc
STRIP = strip
$(TARGET): .depend $(OBJECTS)
echo "#define BUILD_HOST \"`hostname -f`\"" > build_host.h
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBPATH) $(LIBS)
$(STRIP) $(TARGET)
.c.o: $*.h common.h
$(CC) -c $(CFLAGS) $(DEBUGFLAGS) $(INCPATH) -o $@ $<
-include .depend
build_host.h:
echo "#define BUILD_HOST \"`hostname -f`\"" > build_host.h
clean:
-rm -f .depend
-rm -f $(OBJECTS)
-rm -f *~ core *.core
-rm -f version.h
-rm -f $(TARGET)
depend:
.depend: Makefile $(SOURCES) $(HEADERS)
@if [ ! -f .depend ]; then touch .depend; fi
@makedepend -Y -f .depend $(SOURCES) 2>/dev/null
test:
echo $(OBJECTS)
How to use build_host.h and generate a version message:
#include "build_host.h" // created by Makefile
void print_version()
{
printf("This is Thingamajig version " VERSION
" built " __DATE__ " " __TIME__ " on " BUILD_HOST);
}
How to do arbitrary conversions with implicit rules:
LOGS = $(wildcard *.log)
LOGPDFS = $(subst .log$,.pdf,$(LOGS))
all: $(LOGPDFS)
%.pdf : %.log
process-log $<
mv output.pdf $@