今天補完期中考前的最後一篇筆記
最近"有時間的話"也會把前面有漏或有誤的 地方做更正
這次上課主要在講寫程式的環境,跟程式本身較無關係
《sudos》
某些程式要執行時必須切換成root權限,很麻煩
sudos可讓程式在執行某些指令時切換權限
讓一般使用者能有更進階的權限
好處是對方不需要知道root密碼
不會知道你的密碼後,哪 天心血來潮把你的硬碟資料全砍了
sudoers的資料都放在/etc/sudoers
要看的話必須先有root權限
cd /etc
gedit sudoers
想知道詳細內容,請參考man sudoers或此處
《make》
當寫的程式越來越大,要怎麼控管他?
答案是使用make來編譯(參考網頁)
myapp: main.o 2.o 3.o
main.o: main.c a.h
2.o: 2.c a.h b.h
3.o: 3.c b.h c.h
先來看書上的範例, Makefile最簡單的寫法如下圖
要產生myapp跟後面原始碼(main.o、2.o、3.o)有關
會執行下一行的指令
如果Makefile不叫Makefile
改用make -f 檔案名稱,如make -f Makefile1
如果今天我們把其中一個檔案給更名
mv main.c main.cc
他會說找不 到main.c,就不能編譯了
如果Makefile裡面沒有all這行,他會去執行第一行
假設今天我把2.c改了,輸入touch 2.c
(touch會將檔案修改時間變成現在時間,內容不變)
因為2.c跟 2.o有關,2.o跟myapp有關
所以編譯2.c跟執行檔
若是touch 3.c,就編譯3.c跟執行檔
configure - 跟make有關,但我沒聽到,再補
《安裝 ncftp 原始碼》
現在開始下載一個原始碼檔案來練習
apt-get source ncftp(裝完 source file 會幫你去解開)
cd ncftp- 3.2.1/
cd ncftp
ll *c(觀看底下所有的C語言檔案)
看到底下有一堆C語言的檔案
如果程式太大(如kernal) 全部編譯可能要編譯一個小時
如果手動打的話一天都編譯不完
所以需要make自動幫有更改的程式編譯
到ncftp- 3.2.1/
輸入make應該會開始編譯
當你小改一個檔案再編譯,重編譯的東西會少很多
《Macros》
課本範例第二個版本(Makefile2)多了幾個macros
需要用的時候再展開
ex.
CC = gcc
$(CC) -o myapp main.o 2.o 3.o
make -p > make- rules
看一下make可以加什麼屬性在檔案中
《Makefile 前面的符號》
# 後面為註解
- 錯誤忽略(有錯繼續執行下一 行)
@ 編譯時不要顯示內容
可以參考前面ncftp-3.2.1/的Makefile
《Makefile的特殊指令》
make clean - 移除編譯的檔案
必須在Makefile中宣告才有作用
如 Makefile3中的
clean:
-@rm main.o 2.o 3.o >& /dev/null
install - 從Makefile中讀取指令,安裝到指定的位置
最後加\代表此行跟下一行是連在一起的(讓你方便看)
就像終端機的;符號
ex. date;w - 等同輸入date再輸入w
◎du - 看目錄大小
外面輸入的規則會覆蓋內建的規則
範例:make CC=g++ -f Makefile2
原來內部寫CC-=gcc,現在變成 g++
make -j4 - 同時做四件事情,理論上比較快
(越大的專案效果越明顯)
gcc -MM *.c - 顯示每個檔案跟誰有關連
‧Suffix and Pattern Rules
老師講太快放棄(也不太重要的樣子)
‧Managing Libraries with make
又講太快,請參考man ar
或是Makefile5的範例
《Subversion 版本控制》
以下老師操作太快又沒有抄到
請自行用Google搜尋相關內容
apt-get install subversion - 安裝
svn co
svn info
svn update
svn -r 5296 update ...etc
《壓縮跟解壓縮》
‧將檔案包起來但是沒壓縮
tar cvf myapp-1.0.tar main.c 2.c 3.c *.h myapp.1 Makefile5
‧gzip壓縮 - gzip myapp-1.0.tar
‧gzip解壓 - gzip -d myapp-1.0.tar.gz
‧tgz壓縮 - tar zcvf myapp_v1.tgz *
‧tgz解壓 - tar zxvf myapp_v1.tgz
上面壓縮部分用*,是先將檔案都丟到同一個目錄中
如果要個別指定檔案名稱,用以下方式
tar zcvf myapp_v1.tgz main.c 2.c 3.c *.h myapp.1 Makefile5
‧在/ncftp-3.2.1中操作
tar zcf ncftp.tar.gz ncftp
tar jcf ncftp.tar.bz2 ncftp
ll -d ncftp* - 發現bz2壓的比較小
‧bz2壓縮 - tar jcvf myapp_v1.tar.bz2 main.c 2.c 3.c *.h myapp.1 Makefile5
‧bz2解壓 - tar jxvf myapp_v1.tar.bz2
《期中考題目要點》
1. 考make的觀念
2. 要會解壓縮跟產生壓縮檔
3. 考試的時候要能登入到linux的環境(要自己準備虛擬機器)
不過關於壓縮解壓縮...直接用檔案總管的封存不就好了嗎?
誰會去記這麼麻煩的指令啊...
好康道相報
※欲轉貼本站文章者,只要註明出處及網址即可,不需我同意了,謝謝您的配合
※留悄悄話的網友請注意:如果您非痞客邦會員(包含使用FB/Google+帳號),是看不到回覆的喔
※痞客邦會自動將疑似廣告留言隱藏,因此若留言後看不到,可能是被系統自動隱藏了,由於我現在很久才會開一次網誌,有看到時我才會將非廣告留言解開,敬請見諒
※留悄悄話的網友請注意:如果您非痞客邦會員(包含使用FB/Google+帳號),是看不到回覆的喔
※痞客邦會自動將疑似廣告留言隱藏,因此若留言後看不到,可能是被系統自動隱藏了,由於我現在很久才會開一次網誌,有看到時我才會將非廣告留言解開,敬請見諒
- Nov 11 Tue 2008 01:35
Linux程設學習筆記(九)
全站熱搜
留言列表