Re: [問題] make有辦法顯示錯誤的地方嗎?
※ 引述《oooooo.bbs@bbs.wretch.cc》之銘言:
> ※ 引述《drlai.bbs@ptt.cc (蘇打)》之銘言:
> > 我抓了一個網路上的程式
> > 裡面有Makefile
> > 我依照說明下指令make all
> > 但FreeBSD卻顯示
> > "make: don't know how to make ../obj/misc/(檔案). Stop"
> > 我拿同一個程式,在Windows XP環境搭配MinGw32卻可以成功compile
> 之前遇到的情況是 Makefile裡面每一行的結尾是 ^M
> 所以make不起來
所以囉,若有 port 內有該軟體,就建議直接用 port 方式安裝,
因為有其他會裝的人幫你都弄好了
或者你知道怎麼裝之後,可以參考 FreeBSD Porter's Handbook 去 send-pr
來當 port maintainer。
其實,要自己手動裝也是可以,
通常若 ^M 結尾,大概原本檔案是在 win 環境內寫的,
有蠻多方式都可以去掉,vi/vim 有取代方式,其他編輯軟體也有類似功能,
或直接在 shell 內執行簡單指令也可以做到,像是:
tr -d \\r < Makefile > Makefile.unix
mv Makefile.unix Makefile
有空的話,可以裝一下 games distribution
並看看 /usr/share/games/fortune/freebsd-tips
基本上一些 UNIX tips/ BSD tips 在裡面都有教哦~~
至於要怎麼判斷 Makefile 是要用 BSD make(pmake) 或是 GNU make(gmake)的話,
可以看一下 Makefile 寫法 (註1)
或者是以 autotools 方式的 Makefile.in, Makefile.am 則可以先 ./configure
再去갠grep AUTOMAKE_OPTIONS Makefile 是不是有下面這樣的字眼,有就是用 gmake
AUTOMAKE_OPTIONS = gnu
==
註1: 以下是以前寫的文章...裡面附註的書籍可以參考看看... :p
》〈[HOWTO] 如何改 FireBird BBS source?〉 Version: 0.32 beta
》Written by Amsterdam <chinsan@xxx.xxx>
》License: GNU FDL Version 1.1, March 2000
》※ 本文章若有錯誤,請不吝指教。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
「安裝是一回事,最需花心力照顧的還是後續的維護。」
By chw(aka woju) <chw@ms.iii.org.tw>
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
──────────────────────────────────────
(壹) 修改 source 前的準備功夫:
──────────────────────────────────────
首先,必須先確定你有基本 C programming 的能力, code 寫得醜,或者用得不好
都暫時沒關係,可以日後逐漸改進,最重要的是我們需要穩定。
不過在修改之前,我們先花點時間了解一下整個 source tree 的重要架構。
以下就簡介 FireBird 3.1-20010830-SNAP 版,目前一些重要的東西存放處:
bbssrc/ChangeLog 這裡記載著每個版次的重大變遷過程紀錄。
bbssrc/doc 存放 Firebird BBS 相關文件,
請詳細閱讀各文件再安裝系統。*強力推薦*
(內容包括: 如何架站、FAQ、設定範例檔)
bin/ 大部分的 BBS 相關執行檔(binary)
及一些 shell script。
etc/ BBS 的一些設定檔。
bbssrc/ BBS 的 source tree
bbssrc/include/ BBS 的 header files
bbssrc/src/ BBS 的主體 source
bbssrc/util/innbbsd/ 提供 BBS 轉信用的程式
(innbbsd + NoCeM_innbbsd patch)
bbssrc/util/local_utl/ BBS 主要工具程式的 source
bbssrc/util/ BBS 其它的工具包
此外,也可以用 du 來鳥瞰全部的 source tree
──────────────────────────────────────
(貳) 資料的備份與還原
──────────────────────────────────────
備份
還原前應注意事項
如何解開壓縮檔
──────────────────────────────────────
(參) 開始修改 source code :《這時請都以 bbs 身份進行各項動作,除非特殊情況》
──────────────────────────────────────
改 source 大致分為三部份,第一部份通常是開站之初的使用者畫面,
第二部份是為了修改部份系統功能的 bugs 或進階功能,第三部份為新增
BBS 原來所沒有的功能。
第一部份嚴格說起來並不算是改 source,只要會用 Editor(註1) 跟 gcc(註2),
任何人都會。 通常為了改特定字串(假如要找 SimCity3000 這個關鍵字眼),
我們可以運用 grep -iR "SimCity3000" * 來找到要改的字串(註3)。
第二部份就稍微要有一些經驗和對 BBS 系統的了解,包括 function 間
的 dependence 關係、BBS struct .... 等。 通常要改一個 function 的話,
可以到 ~/bbssrc/src 下找檔名與之相對應 .c 檔來著手。
如果您不確定要改的是哪個檔,在此假設您要改的地方會出現「香蕉芭樂」,
那麼可以在 ~bbs/bbssrc 用 grep -lR '香蕉芭樂' *
來找到要改的「香蕉芭樂」在哪個檔案。
第三部份就需要更多的時間與精力去讀 BBS source code、struct 及 debug,
甚至要對 UNIX System 有一些背景才能勝任。
還有很重要的一點是,請善用手邊的「人力資源」(註4),對於不熟悉的指令、程式、
function,我們幾乎都可自行用 man BLAH("BLAH"可以是指令、程式、function、...)
來查詢其用法和說明,「運用法門,存乎一心」。
──────────────────────────────────────
(肆) 改 source code 後,該做什麼?《這時請改以 root 身份在 ~bbs/bbssrc 下來做》
──────────────────────────────────────
在你將完成 source code 的更改步驟之後,
尤其是有改過 *.h (header file)的話,建議使用 make clean update 來進行編譯,
在山水蘭陽(註5)上,這大約要花半分鐘左右的時間(註6)。
make 完之後,請務必記得重跑 bbsd ,必要時請清一清 SHM 裡頭的屍體(註7),
這時就可以重新 login BBS 進去測試看看啦。
Good Luck!:)
──────────────────────────────────────
(伍) Debug 篇
──────────────────────────────────────
「我們不是神,不能從你的隻字片語中幫你解決問題..
如果你想要我們幫忙些什麼的話,請送上 error log」
By Vanilla I. Shu <vanilla@FreeBSD.org>
──────────────────────────────────────
(陸) 後記
──────────────────────────────────────
any idea? mailto:s865462@student.thu.edu.tw
──────────────────────────────────────
(柒) 參考資料
──────────────────────────────────────
[1] Andrew Oram & Steve Talbott 著,李果益 譯,蔣大偉校編《make 專案開發工具
(Managing Projects with make)》,2000年10月初版,O'REILLY出版。
[2] Mike Loukides & Andy Oram 著,呂維毅 編譯《GNU 程式設計(Progamming with
GUN Software)》,1999年9月再版,O'REILLY出版。
[3] Paul Vixie <paul@vix.com>, CRONTAB(1), FreeBSD 4.4 manual page
[4] Satoshi Asami and the Awesome Ports Team (originated by David O'Brien),
PORTS(7), FreeBSD 4.4 manual page
[5] Steve Oualline 原著,呂維毅 譯《C++風格與藝術(Practical C++ Programming)
》
,2000年6月三刷,O'REILLY出版。
─────
1)Editor: 就是"編輯器"啦,像是 UNIX 環境下的 joe/vi/pico 等都可以,當然也可以
在 win 環境下用像是 UltraEdit 改好再以 FTP or WinCVS 回傳給 Server。
2)gcc: GNU project C and C++ Compiler(GNU C/C++編譯器)
3)grep: 是很好用的工具,專門可以幫您找出您要的東西,
並列出檔名或檔案中內含文字。
有的時候您會想知道,哪些檔案內容有您欲尋找的字串,像想要修改輸入(Input)
輸出(Output)介面時,就需要使用 grep 指令
4)man: 就是 Manual 的簡稱啦,順便介紹一下 man 環境下的基本操作:
◎ Space鍵,捲到下一頁 ◎ ↑↓鍵,這...不用多說了吧?^_^;;
◎ q鍵,可隨時離開(quit)。
此外,您的瞳孔中要是出現下列亮白色的標題字眼,比較常見的像是:
NAME
└────── 它的全名、「學名」。
LBRARY
└────── 它屬於哪一種的 Library。
(Crypt Library, Standard C Library, etc)
SYNOPSIS
└────── 「簡介」是也,簡潔地說明這東西使用上的概要用法。
DESCRIPTION
└────── 這裡會有比較「長~一點」的文字描述來介紹說明。
ENVIRONMENT
└────── 您可以因「機」制宜,而改變這裡所列的環境變數。
EXAMPLES
└────── 簡單介紹實際使用上的用法範例。
RETURN VALUES
└────── 此 function 在各種狀況下的傳回值。
SEE ALSO
│ crontab(5), cron(8)
└─── 「另見」者也,如果您閱讀完本章的說明手冊之後,悟性大發,想要
更上一層樓,一窺 UNIX Programming 的神秘世界,則該篇作者建議
您可以參考的相關部分以繼續深入探究,這裡舉例的是您可以
man 5 crontab 以取得 crontab(5) 說明
或 man 8 cron 以取得 cron(8) 說明
BUGS
│ This man page is too long.
└───── 這裡會說明它目前的 bugs。 :)
HISTORY
└───── 這,就是有關這份文件的考古啦...
AUTHORS
└───── 這份說明手冊的作者或 maintainer(s) or team。
︴FreeBSD 必備寶典
︴http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html
︴如果您覺得沒有中文的話,食之無味,可到 tw.bbs.comp.386bsd 找一位叫做
︴statue 的大大所推動的中文 HOWTO。
︴/usr/share/doc/en_US.ISO_8859-1/books/handbook/index.html
︴實在是進可攻、退可守,送禮自用兩相宜,誠乃「居家必備.旅行常用」之良品
。
通常 BBS 編譯或安裝遇到問題,*強烈建議* 請先自行查閱相關文件(doc)、
手冊(man) 以及 source code,看看是否自尋解答,經過一番努力與掙扎之後
,應該都是可以找到解答的,真是「不是一番寒徹骨,爭得梅花撲鼻香。」啊~
若真的還沒有的話,嗯....這個嘛,
>>> 以下內容編修自 FB3 本身文件(~bbs/bbssrc/doc/Firebird-30) <<<
========================================================================
當然啦,在求助之前請詳述您的系統平台、所用的編譯器、安裝的 BBS 版本,
以及出現的錯誤訊息等資訊,這樣子大家才能容易幫您找出可能發生問題的地方,
不然可能會沒人回答您的問題喔!又,在發問前,請先往前找找舊文章並搜尋
精華區,查看是否有人回答過相同的問題,以免浪費網路資源。
========================================================================
當然,若您或得靈感、偶有心得,也歡迎把您的經驗回饋給大家一起分享交流。
5)宜蘭資教中心.山水蘭陽BBS(bbs.ilc.edu.tw)
OS:FreeBSD 4.4R
HW:HP E60(Celeron 450MHz/256MB RAM/9 GB SCSI HD)+Quantum ATLAS V 18.3GB
SEE ALSO https://bbs.ilc.edu.tw/info.php
6)編譯過程所需時間,大致會隨以下情況而有所改變:
a) source code 複雜程度和編譯時下的 argument(參數)
b) 當時上站人數多寡與外部程式執行狀況
c) 機器性能以及 tune(調校) 的功力
7)簡單來說,
ipcs →列出 System V interprocess communication facilities 的使用狀態﹔
ipcrm→移除特定的 message queues, semaphore sets, and shared segments,
(舉例)用法:ipcrm -M <shmkey>
詳情請 man ipcs 以及 man ipcrm 。
--
與您分享的快樂勝過獨自擁有 :)
--
靜中見真境,淡中識本然
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: 61-63-0-host123.kbtelecom.net.tw
討論串 (同標題文章)
FreeBSD 近期熱門文章
PTT數位生活區 即時熱門文章