\documentstyle[lslide,a4wide]{harticle}

\addtolength{\textheight}{-0.5in}
\verttop
\shadowframe

\begin{document}

\title{MAKE}
\author{±Ç ¹ü ÁØ}
\organization{SPARCS} 
\date{1993³â 7¿ù 14ÀÏ}
\titlepage

\begin{slide}
\subsection{Overview}
\begin{itemize}

\item Dependency Checking: {\tt make} vs Shell Scripts
	\begin{itemize}
	\item °°Àº ±â´ÉÀ» ¼öÇàÇÏ´Â shell scripts Á¦ÀÛ °¡´É, ±×·¯³ª...
	\end{itemize}
\vspace{5mm}

\item MakefileÀÇ Á¦ÀÛ

\begin{large}
\begin{verbatim}
target... :  [ dependency... ]
             [ command ]
             ...
\end{verbatim}
\end{large}

	\begin{itemize}
	\item command°¡ ÀÖ´Â ÇàÀº tabÀ¸·Î ½ÃÀÛ
	\item ÁÖ¼®Àº sharp(\#)À¸·Î ½ÃÀÛ
	\item È­ÀÏ ÀÌ¸§Àº {\tt makefile} ¶Ç´Â {\tt Makefile}
	\item °¢°¢ÀÇ ÇàÀº µ¶¸³ÀûÀÎ shell¿¡ ÀÇÇØ ½ÇÇà (¹Ý½°Ç¥, ¹é½½·¡½¬ »ç¿ë)
	\end{itemize}
\vspace{5mm}


\item Implicit RuleÀÇ ±âº»ÀûÀÎ »ç¿ë
	\begin{itemize}
	\item Æ¯Á¤ target¿¡ ´ëÇÑ ±ÔÄ¢ÀÌ ¾øÀ» °æ¿ì implicit rule Àû¿ë
	\item {\tt /usr/include/make/default.mk}
	\item suffix rule°ú pattern-matching rule
	\end{itemize}
\vspace{5mm}

\item DependencyÀÇ Ã³¸®
	\begin{itemize}
	\item ±íÀÌ ¿ì¼± Å½»ö (depth-first dependency scan)
	\item Å½»ö¿¡¼­ ¹ß°ßµÇÁö ¾ÊÀº targetÀº Ã³¸®µÇÁö ¾ÊÀ½
	\item ÃÖÃÊ·Î Å½»öÇÏ´Â ½ÃÁ¡À» ´Ù¸£°Ô ÁöÁ¤ÇÒ ¼ö ÀÖÀ½
	\end{itemize}
\vspace{5mm}

\item Null Rules
	\begin{itemize}
	\item implicit rule Àû¿ë, ¾Æ´Ï¸é SCCS get, ¾Æ´Ï¸é null rule
	\item Æ¯Á¤ targetÀÇ ruleÀÌ Ç×»ó ½ÇÇàµÇµµ·Ï ÇÏ±â À§ÇØ ÀÌ¿ë
	\end{itemize}
\vspace{5mm}

\item ¸ð¸£´Â target
	\begin{itemize}
	\item Çö µð·ºÅä¸®
	\item target entry
	\item implicit rule
	\item SCCS history
	\item {\tt .DEFAULT} special target
	\end{itemize}
\vspace{5mm}

\item Ç¥½Ã ¾øÀÌ ¸í·É ½ÇÇà
	\begin{itemize}
	\item at-sign(@)À¸·Î ½ÃÀÛ
	\item {\tt -s} ¿É¼Ç
	\item {\tt .SILENT} special target ÁöÁ¤
	\end{itemize}
\vspace{5mm}

\item ¸í·É Ã³¸® »óÅÂÀÇ ¹«½Ã
	\begin{itemize}
	\item minus(--)·Î ½ÃÀÛ
	\item {\tt -i} ¿É¼Ç ({\tt -k} ¿É¼Ç)
	\item {\tt .IGNORE} special target ÁöÁ¤
	\end{itemize}

\end{itemize}
\end{slide}

\begin{slide}
\begin{itemize}

\item ÆÄ¶ó¹ÌÅÍÀÇ Àü´Þ - ¸ÅÅ©·Î
	\begin{itemize}
	\item macro reference
	\item macro definition --- command line ¶Ç´Â Makefile ³»¿¡¼­ ÁöÁ¤
	\end{itemize}
\vspace{5mm}

\item Command Dependency Checking --- {\tt .KEEP\_STATE}
	\begin{itemize}
	\item ¸í·É ½ÇÇà¿¡ µû¸¥ ºÎ°¡Àû Á¤º¸¸¦ ÀúÀå --- {\tt .make.state}
	\item environment variable¿¡¼­ ÁöÁ¤ °¡´É
	\item ¹°À½Ç¥(?)·Î ½ÃÀÛÇÏ´Â ¸í·ÉÀº checkingÀ» ¾È ÇÔ
	\item ´À³¦Ç¥(!)·Î ½ÃÀÛÇÏ´Â ¸í·ÉÀº ¹«Á¶°Ç checking ÇÔ
	\end{itemize}
\vspace{5mm}

\item Hidden Dependency
	\begin{itemize}
	\item {\tt \#include}·Î Æ÷ÇÔµÇ´Â Çì´õ È­ÀÏ
	\item {\tt .KEEP\_STATE}·Î ÇØ°á °¡´É
	\item {\tt .INIT} --- ÃÊ±â¿¡ ÇÊ¿äÇÑ Çì´õ È­ÀÏ »ý¼º
	\end{itemize}

\end{itemize}
\end{slide}

\begin{slide}
\begin{itemize}

\item Á¤º¸ÀÇ Ãâ·Â
	\begin{itemize}
	\item {\tt -n} ¿É¼Ç --- ½ÇÇàÇÏÁö ¾Ê°í Ãâ·Â¸¸
	\item {\tt -d} ¿É¼Ç --- À¯È¿ ±â°£À» È®ÀÎÇÏ´Â ±Û Ãâ·Â
	\item {\tt -dd} ¿É¼Ç --- ¸ðµç dependency È­ÀÏ Ãâ·Â
	\item {\tt -D} ¿É¼Ç --- makefileÀÇ ³»¿ë Ãâ·Â
	\item {\tt -DD} ¿É¼Ç --- makefile, state file, hidden dependency report
	\item {\tt -f} ¿É¼Ç --- ´Ù¸¥ ÀÌ¸§ÀÇ makefile ÁöÁ¤
	\item {\tt -p} ¿É¼Ç --- macro definition°ú target entry Ãâ·Â
	\item {\tt -P} ¿É¼Ç --- dependency tree Ãâ·Â
	\item {\tt -t} ¿É¼Ç --- ´Ù½Ã ¸¸µéÁö ¾Ê°í ³¯Â¥¸¸ ¼öÁ¤ ({\tt touch})
	\item Reference ManualÀÇ {\tt make}(1) ÂüÁ¶
	\end{itemize}

\end{itemize}
\end{slide}

\begin{slide}
\subsection{{\tt make}¸¦ ÀÌ¿ëÇÑ ÄÄÆÄÀÏ}
\begin{itemize}

\item Compilation Strategy
	\begin{itemize}
	\item °¢ ¿ø½Ã È­ÀÏÀ» °¢°¢ÀÇ ¸ñÀû({\tt .o}) È­ÀÏ·Î ÄÄÆÄÀÏ
	\item ÇÏ³ªÀÇ ½ÇÇà °¡´É È­ÀÏ·Î ¸µÅ©
	\item µð½ºÅ© °ø°£Àº ´õ ¸¹ÀÌ ¾²Áö¸¸, ½Ã°£ Àý¾à
	\end{itemize}
\vspace{5mm}

\item °£´ÜÇÑ Makefile

\begin{large}
\begin{verbatim}
#   Simple makefile for compiling a program from
#   two C source files.

.KEEP_STATE:

functions: main.o data.o
    cc -sun4 -O -o functions main.o data.o

main.o: main.c
    cc -sun4 -O -c main.c

data.o: data.c
    cc -sun4 -O -c data.c

clean:
    rm functions main.o data.o
\end{verbatim}
\end{large}

\end{itemize}
\end{slide}

\begin{slide}
\begin{itemize}

\item Predefined Macros
	\begin{itemize}
	\item {\tt COMPILE.c} --- {\tt .c} È­ÀÏ¿¡¼­ {\tt .o} È­ÀÏÀ» ¸¸µé±â À§ÇÑ ¸í·É
	\item {\tt LINK.c} --- ¸ñÀû È­ÀÏÀ» ¸µÅ©ÇÏ±â À§ÇÑ ¸í·É
	\item {\tt CC} --- {\tt cc} ¸í·É
	\item {\tt CFLAGS} --- {\tt cc} ¸í·É¿¡ ºÙ´Â ¿É¼Ç
	\item {\tt CPPFLAGS} --- {\tt cpp} ¸í·É¿¡ ºÙ´Â ¿É¼Ç
	\item {\tt LDFLAGS} --- {\tt ld} ¸µÅ© ¿¡µðÅÍ¿¡ ºÙ´Â ¿É¼Ç
	\item {\tt TARGET\_ARCH} --- target-architecture (Å©·Î½º ÄÄÆÄÀÏ)
	\end{itemize}

\begin{large}
\begin{verbatim}
#   Simple makefile for compiling a program from
#   two C source files.

CFLAGS = -O

.KEEP_STATE:

functions: main.o data.o
    ($LINK.c) -o functions main.o data.o

main.o: main.c
    ($COMPILE.c) main.c

data.o: data.c
    ($COMPILE.c) data.c

clean:
    rm functions main.o data.o
\end{verbatim}
\end{large}

\end{itemize}
\end{slide}

\begin{slide}
\begin{itemize}

\item Implicit Rules (Suffix Rules)
	\begin{itemize}
	\item °°Àº base nameÀÇ ´Ù¸¥ È­ÀÏ·ÎºÎÅÍ »ý¼º
	\item suffixes list¿¡ ÀÖ´ÂÁö ÂüÁ¶ÈÄ suffix rule Àû¿ë
	\item suffix°¡ ¾ø´Â È­ÀÏ (null suffix) --- ½ÇÇÛ È­ÀÏ?
	\item ¿©·¯ °³ÀÇ dependency fileÀÌ ÀÖ´Â °æ¿ì
	\end{itemize}
	
\begin{large}
\begin{verbatim}
SUFFIXES=  .o .c .c~ .s .s~ .S .S~ .ln .f .f~ \
.F .F~ .l .l~ .mod .mod~ .sym .def .def~ .p .p~ \
.r .r~ .y .y~ .h .h~ .sh .sh~ .cps .cps~

.SUFFIXES:  $(SUFFIXES)
\end{verbatim}
\end{large}
\vspace{5mm}

\item Dynamic Macros
	\begin{itemize}
	\item {\tt \$@} --- ÇöÀç targetÀÇ ÀÌ¸§
	\item {\tt \$?} --- targetº¸´Ù ´Ê°Ô »ý¼ºµÈ dependencyÀÇ list
	\item {\tt \$<} --- dependency fileÀÇ ÀÌ¸§
	\item {\tt \$*} --- ÇöÀç targetÀÇ base name
	\item modifier --- D¿Í F
	\item no transitive closure
	\end{itemize}
\vspace{5mm}

\item Suffix RuleÀÇ Ãß°¡

\begin{large}
\begin{verbatim}
.SUFFIXES: .ms .tr

.ms.tr:
	troff -t -ms $< > $@
\end{verbatim}
\end{large}

\end{itemize}
\end{slide}

\begin{slide}
\begin{itemize}

\item Pattern-Matching Rules
	\begin{itemize}
	\item {\em prefix{\tt \%}suffix}ÀÇ ÇüÅÂ ({\tt \%}´Â wildcard)
	\item pattern-matching ruleºÎÅÍ Àû¿ë
	\end{itemize}

\begin{large}
\begin{verbatim}
%.tr: %.ms
	troff -t -ms $< > $@
\end{verbatim}
\end{large}

\end{itemize}
\end{slide}
\end{document}
