1 / 17

CMPSC 60: Week 4 Discussion

CMPSC 60: Week 4 Discussion. Compiling and Makefiles. What is compiling. gcc steps preprocessing – you know what this does compilation – produces assembly code assembly – creates an object file (.o) linking – links .o files to create executable. gcc non-optional options.

rusty
Download Presentation

CMPSC 60: Week 4 Discussion

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CMPSC 60: Week 4 Discussion Compiling and Makefiles

  2. What is compiling • gcc steps • preprocessing – you know what this does • compilation – produces assembly code • assembly – creates an object file (.o) • linking – links .o files to create executable

  3. gcc non-optional options • -c – compile but don’t link • -o – executable file name • -l<library> – link with library • -L<dir> – non-standard directory for libraries gcc -o taxman taxman.c -ltman -L <dir>

  4. LIBRARY_PATH env. variable • Set the LIBRARY_PATH environment variable with (colon separated) directories • gcc will search these directories when looking for static libraries In csh (or .cshrc): setenv LIBRARY_PATH "/cs/student/cs60/test:cs/student/arun/libs" In bash (or .bashrc): export LIBRARY_PATH= "/cs/student/cs60/test:cs/student/arun/libs"

  5. gcc optional options • -Wall – print lots of warnings • -W – print fewer (but sometimes different) warnings • -pedantic – strict ANSI C standard • -g – generate symbol table for debugging • -O<1-3> - compile with optimizations

  6. Why we need Makefiles • Source files can be dependent on each other in very complicated ways. • Saves time of having to remember what to recompile, or recompile everything

  7. Makefiles • Target • the name of a task – can be compiling a file, or a number of other things • Dependency • a target will often have dependencies • i.e. other targets that need to be done before it • A target is considered Up to date if it is more recent all files it depends on

  8. Make tips • In a given target like: Build: gcc -o exe input.c helper.c space before the command is a single tab character • Examples..

  9. Dependencies stimulate: stimulate.o inputs.o ouputs.o gcc -o stimulate stimulate.o inputs.o ouputs.o stimulate.o: stimulate.c gcc -c stimulate.c • stimulate.o, inputs.o, outputs.o are dependencies • If stimulate is not uptodate, tries to create it • Creates dependencies if needed • Dependencies can also be files

  10. Abbreviations • $@ - full target name • $* - target name without suffix stimulate: stimulate.o inputs.o ouputs.o gcc -o stimulate stimulate.o inputs.o ouputs.o becomes stimulate: $*.o inputs.o ouputs.o gcc -o $@ $*.o inputs.o ouputs.o

  11. Defines OBJECTS = stimulate.o inputs.o outputs.o stimulate: stimulate.o inputs.o ouputs.o gcc -o stimulate stimulate.o inputs.o ouputs.o becomes stimulate: $(OBJECTS) gcc -o $@ $(OBJECTS) CC = gcc CFLAGS = -g

  12. Suffix rules .c.o: $(CC) $(CFLAGS) -c $< defines a suffix rule to create .o from .c When .o needed, can use this rule to create from .c

  13. How to run make • Type make • Executes first target defined • Other targets can be executed as well by typing: • make <target> • If makefile is not called Makefile or makefile • make -f <makefile name>

  14. Other handy make targets Target to build your executable – make sure to have this as the first rule all: <whatever you need> Target to get rid of all old files clean: rm -f *.o *~ #*# core* Make a brand new executable fresh: clean all

  15. Write your own Makefile • Compile options: -g –Wall –pedantic –W • Needed libraries: -lm • Main file main.c and helper file that final executable depend on (helper.c)

  16. Good solution CC = /usr/bin/gcc CFLAGS = -g -Wall -pedantic -W LIBS = -lm APP = basic OBJS = main.o helper.o all: $(APP) $(APP): $(OBJS) $(CC) $(CFLAGS) -o $(APP) $(OBJS) $(LIBS) main.o: $*.c gcc $(CFLAGS) -c $*.c helper.o: $*.c gcc $(CFLAGS) -c $*.c clean: rm -f *.o *~* $(APP)

  17. Also works (because of default suffix rules) CC = /usr/bin/gcc CFLAGS = -g -Wall -pedantic -W LIBS = -lm APP = basic OBJS = main.o helper.o all: $(APP) $(APP): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS) main.o: helper.o: clean: rm -f *.o *~* $(APP)

More Related