c++ - Makefile vpath 不适用于头文件

标签 c++ c gcc makefile

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

这是生成文件:

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.h 都不是。我在 gcc 中收到一条错误消息,指出编译 Event.c 时未找到这两个文件。

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

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

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

最佳答案

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

INCLUDE := include

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

关于c++ - Makefile vpath 不适用于头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9446634/

相关文章:

c++ - 如何在 Qt Creator 的 constexpr 函数中使用循环?

c++ - 为什么我的浮点值看起来不等于它本身?

c++ - 在 C++ 中实现通用构建器模式

c++ - 使用 ncurses 在 C++ 中进行移动绑定(bind)

将图像转换为原始位图文件

c - 查找定义 C 函数的头文件

c - 了解 c 代码在 gcc 编译器上的输出

c - 将纬度和经度值分配给像素

linux - 使用 gcc 时找不到版本 `GLIBC_2.11'

Gcc无法识别 `-I../path`