linux下C工程層級目錄的Makefile編寫

2021-06-13 22:45:40 字數 1538 閱讀 3626

以前在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 是提示檢查不能通過的分割...