01.09.2014 Views

The Linux Development Platform Configuring, Using, and ... - Classes

The Linux Development Platform Configuring, Using, and ... - Classes

The Linux Development Platform Configuring, Using, and ... - Classes

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CH04.fm Page 125 Monday, October 7, 2002 8:54 PM<br />

Working with Multiple Makefiles <strong>and</strong> Directories 125<br />

N O T E<br />

After defining variables, we have a rule for each target. This rule basically has two comm<strong>and</strong>s<br />

on the same line. <strong>The</strong> first comm<strong>and</strong>, cd, is used to change the directory where source<br />

files for that target are located. In the second comm<strong>and</strong>, make uses makefile in that directory to<br />

build that target. Please note that we can also use the $(MAKE) variable for this purpose.<br />

In the clean <strong>and</strong> install rules, we use the for loop to go into each directory <strong>and</strong> execute<br />

some comm<strong>and</strong>s. <strong>The</strong> for loop is explained later in this chapter.<br />

4.4.2 Makefile in common-dir Directory<br />

<strong>The</strong> files in the common-dir directory are used to build a simple library that is used by<br />

other targets at link time. <strong>The</strong> makefile in this directory is listed below:<br />

# Variable definition<br />

SRCS = common.c<br />

OBJS = common.o<br />

HDRS = common.h<br />

LIBCOMMON = libcommon.a<br />

INSTALLDIR = /root<br />

CC = gcc<br />

CFLAGS = -g -O2 -c<br />

# Default Target<br />

Please note that the following lines:<br />

ftp:<br />

@cd $(FTPDIR) ; make<br />

are not equal to the following three lines:<br />

ftp:<br />

@cd $(FTPDIR)<br />

make<br />

In the first case, make changes the directory to $(FTPDIR)<br />

<strong>and</strong> then executes the make comm<strong>and</strong> in that directory, which is<br />

the right thing to do. However in the second case, the cd comm<strong>and</strong><br />

is executed <strong>and</strong> after that the next make comm<strong>and</strong> is again<br />

executed in the current directory. <strong>The</strong> effect of the cd comm<strong>and</strong> is<br />

lost when make goes to the next line to execute the next comm<strong>and</strong>.<br />

This is because of a new instance of sub-shell. that executes<br />

comm<strong>and</strong>s in each line as discussed earlier in this chapter.<br />

$(LIBCOMMON): $(SRCS) $(HDRS)<br />

$(CC) $(CFLAGS) common.c<br />

ar -cr $(LIBCOMMON) $(OBJS)<br />

ranlib $(LIBCOMMON)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!