Makefile vpath не работает для заголовочных файлов - PullRequest
1 голос
/ 25 февраля 2012

Я пытаюсь использовать vpath в моем Makefile, чтобы избежать префикса каждого исходного файла с именем каталога.Но я не могу заставить его работать должным образом.

Вот 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 .h - нет.Я получаю сообщение об ошибке в gcc, в котором говорится, что оба файла не были найдены при компиляции Event.c.

Я пытался изменить директиву #include в моем C-файле на каждую из них одновременно.

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

Не могли бы вы помочь мне с этой проблемой?Я действительно хочу избегать использования имен каталогов перед каждым исходным файлом, так как мой настоящий Makefile больше этого.

1 Ответ

8 голосов
/ 25 февраля 2012

Директива vpath контролирует только то, как Make находит зависимости; это никак не влияет на работу GCC. Если у вас есть заголовки в каком-то другом каталоге, вам нужно явно указать GCC с -I:

INCLUDE := include

$(CC) -I$(INCLUDE) $c $< -o $@
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...