details:
http://www.itrs.tw/hg/tutorials/rev/c0c29aa940ea
changeset: 15:c0c29aa940ea
user: Scott Tsai <
scot...@gmail.com>
date: Sun Sep 23 09:11:32 2012 +0800
description:
make_tutorial: add final example and translate to XeTeX
diffstat:
make_tutorial.tex | 82 +++++++++++++++++++++++++++++-----------
1 files changed, 59 insertions(+), 23 deletions(-)
diffs (169 lines):
diff -r 330891fd890c -r c0c29aa940ea make_tutorial.tex
--- a/make_tutorial.tex Wed Sep 09 01:56:47 2009 +0800
+++ b/make_tutorial.tex Sun Sep 23 09:11:32 2012 +0800
@@ -1,14 +1,30 @@
-\documentclass[12pt]{article}
+% !TEX TS-program = xelatex
+% !TEX encoding = UTF-8 Unicode
+\documentclass{book}
+\usepackage{hyperref}
+
+\usepackage{fontspec}
+\usepackage[BoldFont,SlantFont,CJKnumber,fallback]{xeCJK}
+\setmainfont{Liberation Serif}
+\setromanfont{Liberation Sans}
+\setmonofont{Liberation Mono}
+
+%% list Chinese fonts: "fc-list :lang=zh"
+%\setCJKmainfont{WenQuanYi Zen Hei}
+\setCJKmainfont{AR PL UMing TW}
+\setCJKsansfont{AR PL UKai TW}
+%\setCJKmainfont{PMingLiU}
+\CJKsetecglue{\hspace{2mm}}
+
+\XeTeXlinebreaklocale "zh"
+\XeTeXlinebreakskip = 0pt plus 1pt
\usepackage{tabularx}
-\usepackage{CJK}
-\usepackage[CJKbookmarks, dvipdfm]{hyperref}
\usepackage{scottt_handout}
\begin{document}
-\begin{CJK}{UTF8}{bsmi}
\title{GNU make 基礎}
-\author{Scott Tsai \and learner\footnote{Scott Tsai 教授,learner 紀錄。}}
+\author{Scott Tsai \and Po-Wei Wang\footnote{Scott Tsai 教授,Po-Wei Wang 紀錄。}}
\maketitle
æ¤ç¯‡è¬›ç¾©æ•™ä½ 怎麼把個別的CåŽŸå§‹ç¢¼ç·¨è¯æˆ ä¸€å€‹ç¨‹å¼ ï¼Œé‚„æœ‰æ€Žéº¼ä½¿ç”¨åˆ¥äººå¯«å¥½çš„cå‡½å¼ åº«ã€‚
@@ -111,29 +127,26 @@
\end{mycommand}
\code{clean} ä¸ æœƒæ˜¯ä¸€å€‹æª”æ¡ˆçš„å å—ï¼Œè€Œæ˜¯ä¸€å€‹ã€Žå ‡ã€ çš„ Makefile 目標,跟 \code{all} 一樣。
\code{clean} ä¸ ä¾ è³´ä»»ä½•äººï¼Œæ‰€ä»¥æ¯ æ¬¡ \code{make clean} 都會執行。
-\code{clean} ä¸‹é ¢é‚£ä¸€è¡Œï¼Œæ˜¯ã€Žè¦ å»ºç«‹ \code{clean} 時所需執行的動作〠,開é \emph{ä¸€å®šè¦ æ˜¯ tab}。
+\code{clean} ä¸‹é ¢é‚£ä¸€è¡Œï¼Œæ˜¯ã€Žè¦ å»ºç«‹ \code{clean} 時所需執行的動作〠,開é \emph{ä¸€å®šè¦ æ˜¯ <Tab>}。
\section{數å¸å‡½å¼ 庫}
會影響 C 語言編è¯çš„『內建變數〠如下:
\begin{mycode}
-CC # Cç·¨è¯å™¨
+CC # C ç·¨è¯å™¨, é è¨cc
LD # é€£çµ å™¨
CFLAGS # ç·¨è¯å™¨å ƒæ•¸ (compiler flags)ï¼Œç·¨è¯æ™‚使用
LDFLAGS # é€£çµ å™¨å ƒæ•¸ (loader flags)ï¼Œè ¯çµ æ™‚ä½¿ç”¨
\end{mycode}
\begin{mycode}
-CXX # C++ç·¨è¯å™¨
-CXXFLAGS # C++ç·¨è¯å™¨å ƒæ•¸ï¼Œå‚³çµ¦ CXX
+CXX # C++ ç·¨è¯å™¨, é è¨ g++
+CXXFLAGS # C++ ç·¨è¯å™¨å ƒæ•¸ï¼Œå‚³çµ¦ $(CXX)
\end{mycode}
-{Example}
-\bigbreak
-{實驗}
+\subsection{實驗}
+å¯«ä¸€å€‹ç¨‹å¼ sqrttest,輸入 n,輸出 $\sqrt{n}$。
-å¯«ä¸€å€‹ç¨‹å¼ sqrttest,輸入 n,輸出 $\sqrt{n}$
-
-{tip}ï¼šæ ¹è™Ÿçš„å‡½å¼ æ˜¯ sqrt() ,在 math.h 裡
+æ ç¤ºï¼šæ ¹è™Ÿçš„å‡½å¼ æ˜¯ sqrt() ,在 math.h 裡。
\bigbreak
{sqrttest.c}
@@ -169,7 +182,8 @@
åœ¨é€£çµ æ™‚æœƒå‡ºéŒ¯ã€‚
å› ç‚ºåœ¨æˆ‘å€‘çš„ Linux 系統上,
-諸如 \code{sin}, \code{sqrt} ç‰æ•¸å¸å‡½å¼ æ˜¯ç ¨ç«‹æ”¾åœ¨ä¸€çš„å‡½å¼ åº«å…§ï¼ˆlibm.so)。
+諸如 \code{sin()}, \code{sqrt()} ç‰æ•¸å¸å‡½å¼ 是放在檔å 為 libm.so çš„å‡½å¼ åº«å…§
+(libm ä¸çš„ m 代表 math,數å¸ï¼‰ã€‚
\code{-lm} çš„æ„ æ€ ç‚ºã€Žé€£çµ å 為 libm.so çš„å‡½å¼ åº«ã€ ã€‚
ä¿®æ£å¾Œçš„ Makefile
@@ -182,7 +196,7 @@
\begin{mycommand}
cc -lm sqrttest.c -o sqrttest
\end{mycommand}
-ç·¨è¯å®Œæˆ 〠執行。還是有錯。輸入100,為什麼它輸出 0 呢?
+ç·¨è¯å®Œæˆ 〠執行。還是有錯。輸入100,為什麼它輸出 0 å‘¢ï¼Ÿï¼ˆç”æ¡ˆè¦‹ä¸‹ç¯€ï¼‰
\subsection{Makefile 變數}
Makefile è®Šæ•¸å€¼çš„ä¾†æº æœ‰ä¸‰ç¨®ï¼š
@@ -196,6 +210,7 @@
\code{make CFLAGS=-Wall}
\item å¾žç’°å¢ƒè®Šæ•¸è®€å –ï¼š
\code{CFLAGS=-Wall make}
+
æœ‰é—œç’°å¢ƒè®Šæ•¸ï¼Œè«‹å ƒé–±ä»¥ä¸‹ç¶²å €ä¸"Shell Variables"一節
\url{
http://docs.google.com/View?docid=ah8ht9jfffdk\_1356hccbq6hh}
\end{itemize}
@@ -355,7 +370,7 @@
\end{enumerate}
\subsection{GNU make 與 gcc 語法}
-GNU make 的自動變數
+GNU make 的自動變數:
\begin{mycommand}
'$@' 目標檔å
'$<' 冒號後的第一個檔案(第一個prerequisite)
@@ -364,7 +379,7 @@
'$*' 檔å è¦ å‰‡ä¸ç¬¦å ˆæ¨£å¼ 的部份
\end{mycommand}
-gcc å ƒæ•¸
+gcc å ƒæ•¸ï¼š
\begin{table}[!htp]
\begin{tabularx}{\linewidth}{|l| X|}
\hline
@@ -395,16 +410,16 @@
\end{tabularx}
\end{table}
-Examples:
+gcc å ƒæ•¸ç¯„ä¾‹ï¼š
\begin{mycommand}
gcc -lm -Wall -Os -g -o sqrttest sqrttest.c
-gcc -c -o a.o a.GNU make 與 gcc 語法c
+gcc -c -o a.o a.c
gcc -I/usr/local/include -L/usr/local/lib -lz zcat.c -o zcat
gcc -static -o hello hello.c
gcc -shared -o libz.so deflate.c xx.c
\end{mycommand}
-其他指令:
+其他指令:
\begin{table}[!htp]
\begin{tabularx}{\linewidth}{|l| X|}
\hline
@@ -419,5 +434,26 @@
\end{tabularx}
\end{table}
-\end{CJK}
+\subsection{範例三}
+ç‰¹åˆ¥å¯«çµ¦åˆ å¸è€…抄的 GNU Makefile, 功能:
+\begin{enumerate}
+\item 打開編è¯å™¨çš„è¦å‘Šèˆ‡è¨˜æ†¶é«”æ“ ä½œæª¢æŸ¥ (CFLAGS)
+\item å ‡è¨æ¯ 個 .c, cpp æª”æ¡ˆéƒ½æ˜¯ä¸€å€‹ç ¨ç«‹çš„å° ç¨‹å¼ (wildcard 列出檔案, basename 移除副檔å )
+\item é€£çµ æ•¸å¸å‡½å¼ 庫 (LDFLAGS)
+\end{enumerate}
+
+\begin{mycode}
+# GNUmakefile
+CFLAGS := -Wall -g -Os -Wp,-D_FORTIFY_SOURCE=2
+CFLAGS += -fexceptions -fstack-protector --param=ssp-buffer-size=4
+CXXFLAGS := $(CXXFLAGS)
+LDFLAGS := -lm
+EXECUTABLES := $(basename $(wildcard *.c *.cpp))
+
+all: $(EXECUTABLES)
+clean:
+ rm -f $(EXECUTABLES) core.*
+.PHONY: all clean
+\end{mycode}
+
\end{document}