以前在ubuntu的gcc寫小型的測試程式,都是直接呼叫gcc命令及其選項,突然有想完成稍大的工程的衝動,於是用了下makefile,果然強大。
目錄包含 bin src inc lib obj , makefile檔案與它們同級,是事先設定好的,以下為原始碼檔案:
exchange.h
#ifndef _exchange_h_
#define _exchange_h_
int exchange(int *xp, int y);
#endif
exchange.c
#include "../inc/exchange.h"
int exchange(int *xp, int y)
main.c
#include int main()
makefile
# 編譯變數賦值
cc = gcc
ar = ar rc # 打包生成靜態庫
rm = rm -f
#vpath %.h ./inc
#vpath %.c ./src
# 設定路徑變數
cur_dir = $(shell pwd)
bin_dir = $(cur_dir)/bin/
src_dir = $(cur_dir)/src/
lib_dir = $(cur_dir)/lib/
inc_dir = $(cur_dir)/inc/
obj_dir = $(cur_dir)/obj/
$(bin_dir)main.exe : $(obj_dir)main.o $(lib_dir)exchange.a
$(cc) $(obj_dir)main.o $(lib_dir)exchange.a -o $(bin_dir)main.exe
$(obj_dir)main.o : $(src_dir)main.c
$(cc) -c $(src_dir)main.c -o $(obj_dir)main.o
$(lib_dir)exchange.a : $(obj_dir)exchange.o
$(ar) $(lib_dir)exchange.a $(obj_dir)exchange.o
$(obj_dir)exchange.o : $(src_dir)exchange.c
$(cc) -c $(src_dir)exchange.c -o $(obj_dir)exchange.o
.phony : clean
clean:
rm -f ./obj/*.o ./bin/* ./lib/*.a
makefile檔案指定了工程目錄中層級檔案的依賴關係和目標檔案的輸出路徑。我用path定義檔案搜尋路徑 與 makefile中路徑變數 同時存在時曾出現「make 放棄迴圈依賴...「的警告,折騰半天時間,最後登出掉vpath命令就好了,不知為什麼!
Linux下的 M困惑
我們有時在windows編輯的檔案,放到了linux環境中,開啟檔案,可能發現每行結尾多了乙個 m 導致一些在windows下能執行的解析程式,放到了linux中,執行就會報錯,問題就出在這個 m 其實這個問題,和作業系統換行符相關。dos windows格式的檔案,用0d 0a cr lf 作為換...
linux 下 M 的解決辦法
個人推薦 dos2unix filename 這個方式最簡單,高效,尤其是在整個工程都是從windows裡搬過來的情況。直接doc2unix project 就可以了 正文 在linux下,不可避免的會用vim開啟一些windows下編輯過的文字檔案。我們會發現檔案的每行結尾都會有乙個 m符號,這是...
Linux下的 lost found目錄
lost found 這個目錄一般情況下是空的,當系統非法關機後,這裡就存放了一些檔案。如果linux分割槽有損壞情況,啟動有問題,不能正常進入文字或圖形介面。那麼一般會出現提示,需要 輸入root密碼登入後採用 fsck t ext3 r usr local 修復 usr 是提示檢查不能通過的分割...