g++ 无法使用 -I 更改包含路径

g++ cannot change include path with -I

我在 kubuntu 上使用 g++ 7.5.0 / GNU make for C++。我的文件结构:

bin
| .o files

header
|archiver.h

source
|main.cpp
|archiver.cpp

makefile

我希望我的源文件能够检测头文件而不必执行#include "../header/archiver.h"。我试过使用:

g++ -I/header

但这不起作用。我收到错误:

g++: fatal error: no input files. 

请求的 makefile

CC = g++
CFLAGS = -c -Wall

objects = bin/main.o bin/archiver.o

all : $(objects)
    $(CC) -o build $(objects)

bin/%.o : source/%.cpp
    $(CC) $(CFLAGS) $?
    mv *.o bin

.PHONY : clean
clean : 
    rm -rf all $(objects)

命令

g++ -I<header-dir>

不会更改 g++ 的任何默认设置,包括后续调用的搜索路径,正如您假设的那样。

您需要为每个单独的 c++ 调用传递该编译器标志,这些调用由 make 根据您的 makefile.
中定义的规则发出 后者是您需要调整的,最好使用 pre-defined makefile 变量,如 CXXFLAGSCXXINCLUDES(查看 GNU-make 文档了解详细信息)。


针对您的具体情况

CFLAGS = -c -Wall -I./header

应该可以。