Makefile vpath不适用于头文件

时间:2012-02-25 18:11:11

标签: c++ c gcc makefile

我正在尝试在Makefile中使用vpath,以避免为每个源文件添加目录名前缀。但我无法让它正常工作。

这是Makefile:

CC=gcc -Wall

vpath %.h include
vpath %.c src 

all: main.c Event.o Macros.h
        $(CC) $< Event.o -o test/a.out  

Event.o: Event.c Event.h Macros.h
        $(CC) -c $< -o $@

正确包含 src 目录。即event.c文件由gcc找到。但是Event.h和Macros都没有。我在gcc中遇到错误,说在编译Event.c时找不到这两个文件。

我尝试一次将C文件中的#include指令更改为每个。

#include "Event.h" /* doesnt work */
#include <Event.h> /* doesnt work */
#include "../include/Event.h" /* works */

你可以帮我解决这个问题吗?我真的想避免在每个源文件之前使用目录名,因为我的实际Makefile比这个大。

1 个答案:

答案 0 :(得分:8)

vpath指令仅控制Make查找依赖项的方式;它不会以任何方式影响GCC的工作方式。如果您在其他目录中有标题,则明确需要告诉GCC -I

INCLUDE := include

$(CC) -I$(INCLUDE) $c $< -o $@