gcc 如何在不写入完整路径的情况下包含本地标头

nfzehxib  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(122)

我的项目看起来像

project
│
├── bin
│    └── makefile
├── include
│      ├── defs.h
│      ├── func.h
│      └── print.h
└── src
     ├── func.c
     ├── main.c
     └── print.c

和makefile文件

OBJS = func.o print.o main.o
TARGET = program

INCLUDE_DIR = ../include
SRC_DIR = ../src

vpath %.h $(INCLUDE_DIR)
vpath %.c $(SRC_DIR)

.PHONY: clean

$(TARGET): $(OBJS)
    $(CC) $^ -o $@

$(OBJS): defs.h

clean:
    rm $(OBJS) $(TARGET)

但当我输入“make”时我得到这个

cc    -c -o func.o ../src/func.c
cc    -c -o print.o ../src/print.c
cc    -c -o main.o ../src/main.c
../src/main.c:1:10: fatal error: func.h: Нет такого файла или каталога
 #include "func.h"
          ^~~~~~~~
compilation terminated.
make: *** [<встроенное>: main.o] Ошибка 1

(对不起,俄语文本,它的东西就像没有这样的文件或目录)
我知道我可以编写#include“../include/func.c”,但有其他解决方案吗?

qcbq4gxm

qcbq4gxm1#

我已经解决了这个问题,现在我的makefile如下所示:

OBJS = func.o print.o main.o
TARGET = program

INCLUDE_DIR = ../include
SRC_DIR = ../src

vpath %.h $(INCLUDE_DIR)
vpath %.c $(SRC_DIR)

.PHONY: clean

$(TARGET): $(OBJS)
    $(CC) $^ -o $@

main.o: main.c defs.h
    $(CC) -c -o $@ -I$(INCLUDE_DIR) $<

$(OBJS): defs.h

clean:
    rm $(OBJS) $(TARGET)

相关问题