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