Makefile编译原理 make 中的路径搜索_2

一.make中的路径搜索

Makefile编译原理 make 中的路径搜索_2_第1张图片

Makefile编译原理 make 中的路径搜索_2_第2张图片 

VPATH变量和vpath关键字同时指定搜索路径。

实验1 VPATH 和 vpath 同时指定搜索路径

mhr@ubuntu:~/work/makefile1/18$ tree
.
├── inc
│ └── func.h
├── main.c
├── makefile
├── src1
│ └── func.c
└── src2
└── func.c

makefile

VPATH := src1
CFLAGS := -I inc

vpath %.c src2
vpath %.h inc

app.out : func.o main.o
	@gcc -o $@ $^
	@echo "Target File ==> $@"

%.o : %.c func.h
	@gcc $(CFLAGS) -o $@ -c $<

main.c

#include 
#include "func.h"

int main()
{
    foo();
	
    return 0;
}	

src1/func.c

#include 
#include "func.h"

void foo()
{
    printf("void foo() : %s\n", "This file is from src1 ...");
}

src2/func.c

#include 
#include "func.h"

void foo()
{
    printf("void foo() : %s\n", "This file is from src2 ...");
}

inc/func.h

#ifndef FUNC_H
#define FUNC_H

void foo();

#endif


mhr@ubuntu:~/work/makefile1/18$ make
Target File ==> app.out
mhr@ubuntu:~/work/makefile1/18$ ./app.out 
void foo() : This file is from src2 ...
mhr@ubuntu:~/work/makefile1/18$ 

 结果表明 当VPATH 和 vpath 同时指定搜索路径,优先选择 vpath 指定的所搜路径。

改1:

将 src/func.c 改为 src1/func.cpp 会发生什么?
├── inc
│ └── func.h
├── main.c
├── makefile
├── src1
│ └── func.cpp
└── src2
└── func.c

mhr@ubuntu:~/work/makefile1/18$ make
Target File ==> app.out
mhr@ubuntu:~/work/makefile1/18$ 
mhr@ubuntu:~/work/makefile1/18$ ./app.out 
void foo() : This file is from src2 ...
mhr@ubuntu:~/work/makefile1/18$ 

实验结论:

- make首先在当前文件夹搜索需要的文件

- 如果失败:make优先在vpath指定的文件夹中搜索目标文件,当vpath搜索失败时,转而搜索VPATH执行的文件夹。

你可能感兴趣的:(Linux驱动,linux)