1

我尝试编写简单的makefile 进行练习。

我有两个目录 1. srcs( .c), 2.include( .h)

并尝试定义包含所有 .c 文件的 SRCS 变量

在当前目录和 srcs 目录中。

下面是我的 Makefile

CURDIR = $(shell pwd)
OBJDIR = $(CURDIR)/objdir
VPATH = $(CURDIR)/srcs
SRCS = $(wildcard *.c)
OBJS = $(patsubst %.c, %.o, $(SRCS))

all: main

main: $(OBJS)
        gcc -o $@ $^

$(OBJS): $(SRCS) | $(OBJDIR)
        gcc -c -o $@ $<

$(OBJDIR): 
        mkdir objdir

我将 current/src 目录指定为 VPATH 以进行查找

当前目录和 current/srcs 中的所有 *.c 文件,但

它在 /srcs 目录中找不到 *.c 文件。

在 Makefile 中定义变量时,可能无法使用 VPATH

正确的?如果它是正确的,请让我知道更好的方法:)

谢谢。

4

1 回答 1

1

VPATH用于目录 make 应该搜索以找到先决条件。

它不会改变$(wildcard)搜索位置。

VPATH允许您foo.c在规则的先决条件列表中使用(显式或隐式)并在当前目录及其VPATH文件的目录中进行查看。

如果要SRCS包含目录中的.c文件,srcs则需要在分配srcs/*.c的附加$(wildcard)调用中包含。SRCS

SRCS = $(wildcard *.c) $(wildcard srcs/*.c)
于 2015-11-29T16:15:03.277 回答