Building an Audio CD Player, Listing 5

### Listing 5. Makefile

    # Generate Position Independent Code for dynamic linking
    # and create a shared object module for JCDdriver to load at run time.
    #
    # Select ARCHOS, CFLAGS, and LDFLAGS for your operating system.
    #
    # Linux
    ARCHOS=ix86-Linux
    CFLAGS= -O -fPIC -I/usr/local/java/include/solaris -I/usr/local/java/include
    LDFLAGS= -shared -Wl,-soname,Jcd_Drive
    #
    # IRIX
    #ARCHOS=mips-Irix
    #CFLAGS= -O -I/usr/java/include/irix -I/usr/java/include
    #LDFLAGS= -shared -Wl,-soname,Jcd_Drive -lcdaudio -lmediad -lds
    #

    JAVAC= javac
    #JAVAC= /usr/local/java/bin/javac
    #JAVAC= espresso

    NATIVE_SRC= Jcd_Drive_$(ARCHOS)

    %.class : %.java
    		$(JAVAC) $<

    Jcd.class:	Jcd.java Jcd_Drive.so
    		$(JAVAC) Jcd.java
    		chmod +x Jcd.class

    Jcd_Drive.so:	$(NATIVE_SRC).o Jcd_Drive.o
    		cc -o Jcd_Drive.so Jcd_Drive.o $(NATIVE_SRC).o $(LDFLAGS)
    		mkdir -p native/$(ARCHOS)
    		cp Jcd_Drive.so native/$(ARCHOS)/Jcd_Drive.so

    Jcd_Drive.h:	Drive.class
    		javah Jcd.Drive
    		touch Jcd_Drive.h

    Jcd_Drive.c:	Drive.java
    		javah -stubs Jcd.Drive
    		touch Jcd_Drive.c

    $(NATIVE_SRC).c:	Jcd_Drive.h