Makefiles & Project 1 Q&A15-441 Recitation 2441 StaffOutline• gcc• make and Makefile• Useful commands• Project 1 Q&ASimple gccIf we have files:• prog.c: The main program file• lib.c: Library .c file• lib.h: Library header file% gcc -c prog.c -o prog.o% gcc -c lib.c -o lib.o% gcc lib.o prog.o -o binarygcc flags• Useful flags1. -g: debugging hook2. -Wall: all warning3. -Werror: treat warning as errors4. -O2, -O3: optimization5. -DDEBUG: macro for DEBUG (#define DEBUG)Examples% gcc -g -Wall -Werror -c prog.c -o prog.o% gcc -g -Wall -Werror -c lib.c -o lib.o% gcc -g -Wall -Werror lib.o prog.o -o binaryBut Don’t Repeat Yourself!Makefile% gcc -g -Wall -Werror -c prog.c -o prog.o% gcc -g -Wall -Werror -c lib.c -o lib.o% gcc -g -Wall -Werror lib.o prog.o -o binaryCC = gccCFLAGS = -g -Wall -WerrorOUTPUT = binaryMakefiletarget: dependency1 dependency2 ...unix command (start line with TAB)unix command...% gcc lib.o prog.o -o binarybinary: lib.o prog.ogcc lib.o prog.o -o binarybinary: lib.o prog.ogcc -g -Wall lib.o prog.o -o binarylib.o: lib.cgcc -g -Wall -c lib.c -o lib.oprog.o: prog.cgcc -g -Wall -c prog.c -o prog.oclean:rm *.o binarybinary: lib.o prog.ogcc -g -Wall lib.o prog.o -o binarylib.o: lib.cgcc -g -Wall -c lib.c -o lib.oprog.o: prog.cgcc -g -Wall -c prog.c -o prog.oclean:rm *.o binaryCC = gccCFLAGS = -g -WallOUTPUT = binary$(OUTPUT): lib.o prog.o$(CC) $(CFLAGS) lib.o prog.o -o binarylib.o: lib.c$(CC) $(CFLAGS) -c lib.c -o lib.oprog.o: prog.c$(CC) $(CFLAGS) -c prog.c -o prog.oclean:rm *.o $(OUTPUT)CC = gccCFLAGS = -g -WallOUTPUT = binary$(OUTPUT): lib.o prog.o$(CC) $(CFLAGS) lib.o prog.o -o binarylib.o: lib.c$(CC) $(CFLAGS) -c lib.c -o lib.oprog.o: prog.c$(CC) $(CFLAGS) -c prog.c -o prog.oclean:rm *.o $(OUTPUT)CC = gccCFLAGS = -g -WallOUTPUT = binaryOBJFILES = lib.o prog.o$(OUTPUT): $(OBJFILES)$(CC) $(CFLAGS) $(OBJFILES) -o binarylib.o: lib.c$(CC) $(CFLAGS) -c lib.c -o lib.oprog.o: prog.c$(CC) $(CFLAGS) -c prog.c -o prog.oclean:rm *.o $(OUTPUT)CC = gccCFLAGS = -g -WallOUTPUT = binaryOBJFILES = lib.o prog.o$(OUTPUT): $(OBJFILES)$(CC) $(CFLAGS) $(OBJFILES) -o binarylib.o: lib.c$(CC) $(CFLAGS) -c lib.c -o lib.oprog.o: prog.c$(CC) $(CFLAGS) -c prog.c -o prog.oclean:rm *.o $(OUTPUT)CC = gccCFLAGS = -g -WallOUTPUT = binaryOBJFILES = lib.o prog.o$(OUTPUT): $(OBJFILES)$(CC) $(CFLAGS) $(OBJFILES) -o binary%.o: %.c# $<: dependency (%.c)# $@: target (%.o)$(CC) $(CFLAGS) -c $< -o $@clean:rm *.o $(OUTPUT)Simple Test Script% ./server 6667 &% cat testfile.01 | ./testscript.py% cat testfile.02 | ./testscript.py% killall -9 serverSimple Test Script#/bin/shecho “Starting server on port 6667.”./server 6667 &SERVERPID = $!echo “Running test files.”cat testfile.01 | ./testscript.pycat testfile.02 | ./testscript.pyecho “Killing server process.”kill $(SERVERPID)CC = gccCFLAGS = -g -WallOUTPUT = binaryOBJFILES = lib.o prog.oall: $(OUTPUT)$(OUTPUT): $(OBJFILES)$(CC) $(CFLAGS) $(OBJFILES) -o binary%.o: %.c# $<: dependencies (%.c)# $@: target (%.o)$(CC) $(CFLAGS) -c $< -o $@clean:rm *.o $(OUTPUT)CC = gccCFLAGS = -g -WallOUTPUT = binaryOBJFILES = lib.o prog.oall: $(OUTPUT) test$(OUTPUT): $(OBJFILES)$(CC) $(CFLAGS) $(OBJFILES) -o binary%.o: %.c# $<: dependencies (%.c)# $@: target (%.o)$(CC) $(CFLAGS) -c $< -o $@test: $(OUTPUT)sh ./testscript.shclean:rm *.o $(OUTPUT)Use Makefile% make% make test% make cleanGoogle– “makefile example”– “makefile template”– “make tutorial”Useful Unix Commands• find “func_name” in files% grep -r func_name .• replace “bad_func_name” to “good_func_name”% sed -e “s/bad_func_name/good_func_name/g”\prog.c > prog.c.newUseful Unix Commands• find a file named “prog.c”% find -name prog.c• download files from Internet% wget http://address/to/file.tar.gz• untar and unzip the file% tar xzvf file.tar.gzProject 1• Checkpoint 2– Echo server– Handle multiple clients– Handle TCP framing • Q &
View Full Document