Makefile 指定源文件目錄 make


top=$(CURDIR)
SRC_DIR=$(top)/src
BUILD_DIR=$(SRC_DIR)
src=$(wildcard $(SRC_DIR)/*.c) 
obj=$(patsubst $(SRC_DIR)/%.c, %.o, $(src))
target=a.out

all:
        cd ./src && $(MAKE)  \
 -f $(top)/Makefile a.out CURDIR=$(top)
        
a.out:$(obj)
        gcc $^ -o $@

.c.o:
        gcc -c $<

clean:
        rm -f $(BUILD_DIR)/*.o $(BUILD_DIR)/$(target)

 

1.工作目錄

  (0)Makefile的工作目錄

    Makefile的工作目錄默認繼承為其父進程的工作目錄,即shell的當前目錄,

    Makefile的工作目錄使用CURDIR變量,

    可以在make時設置CURDIR以改變Makefile的工作目錄

  (1)變量定義的工作目錄

    Makefile執行時,變量首先被定義,變量定義的工作目錄是 CURDIR

  (2)命令執行的工作目錄

    命令執行的工作目錄是CURDIR,命令中可以修改本條命令的工作目錄,無法改變其他命令工作目錄。使用 && 除外

        cd ./src && $(MAKE)  \
 -f $(top)/Makefile a.out CURDIR=$(top)

     這里 make -f $(top)/Makefile .......的工作目錄被 cd ./src改變,這里修改 CURDIR的原因是,新的Makefile進程執行時,為了正確生成 obj字符串,需要將工作目錄修改。

 

    這里 -f的意思是顯示指定 Makefile文件

    注意:

cd ./src
pwd

    這樣pwd是不會被 cd ./src影響的。

cd ./src && pwd

     這樣pwd會被cd ./src影響

 

2. .c.o

.c.o:

    表示 所有的 .o 文件依賴.c 文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM