tutorials: make_tutorial: add final example and translate to XeTeX

7 views
Skip to first unread message

it...@itrs.tw

unread,
Sep 22, 2012, 9:15:22 PM9/22/12
to it...@googlegroups.com
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}
Reply all
Reply to author
Forward
0 new messages