Makefile 使用其他目录中的头文件创建

Makefile 使用其他目录中的头文件创建,makefile,webrtc,Makefile,Webrtc,是否可以使用makefile在另一个目录中使用头文件构建程序? 例如,我有一些文件(名为client.cc),其中包含: ... #include "talk/examples/peerconnection/client/conductor.h" #include "talk/examples/peerconnection/client/main_wnd.h" ... CXX=arm-none-linux-gnueabi-g++ INC=-I/home/footniko/my/webrtcna

是否可以使用makefile在另一个目录中使用头文件构建程序? 例如,我有一些文件(名为client.cc),其中包含:

...
#include "talk/examples/peerconnection/client/conductor.h"
#include "talk/examples/peerconnection/client/main_wnd.h"
...
CXX=arm-none-linux-gnueabi-g++
INC=-I/home/footniko/my/webrtcnative/trunk/
TARGET=$(shell basename `pwd`)
SOURCES=$(wildcard *.cc)
OBJECTS=$(SOURCES:%.cc=%.o)

all: $(TARGET)

$(OBJECTS): $(SOURCES)

$(TARGET): $(OBJECTS)
    $(CXX) -o $(TARGET) $(LDFLAGS) $(INC) $(OBJECTS) $(LOADLIBES) $(LDLIBS)

clean:
    $(RM) $(OBJECTS) $(TARGET)

.PHONY: all clean
这包括在另一个目录中。如何将其添加到makefile? 此时,我有一个Makefile,其中包含:

...
#include "talk/examples/peerconnection/client/conductor.h"
#include "talk/examples/peerconnection/client/main_wnd.h"
...
CXX=arm-none-linux-gnueabi-g++
INC=-I/home/footniko/my/webrtcnative/trunk/
TARGET=$(shell basename `pwd`)
SOURCES=$(wildcard *.cc)
OBJECTS=$(SOURCES:%.cc=%.o)

all: $(TARGET)

$(OBJECTS): $(SOURCES)

$(TARGET): $(OBJECTS)
    $(CXX) -o $(TARGET) $(LDFLAGS) $(INC) $(OBJECTS) $(LOADLIBES) $(LDLIBS)

clean:
    $(RM) $(OBJECTS) $(TARGET)

.PHONY: all clean
其中
/home/footniko/my/webrtcnative/trunk/
-是指向我的头的绝对路径。但是,当我试图做出选择时,会出现以下错误:

client.cc:28:59: fatal error: talk/examples/peerconnection/client/conductor.h: No such file or directory

您可以通过
CPPFLAGS
添加该目录,该目录将被传递给预处理器

CPPFLAGS = -I/home/footniko/my/webrtcnative/trunk/

include
s由预处理器处理,可能应该是
CPPFLAGS
@user657267是的,
CPPFLAGS
几乎适用于所有情况。但是OP正在做C++,所以我只是想更具体一些。如果你想具体化,你应该使用<代码> CPPFLAGs< /Cord>,因为这是预处理器标志的正确变量。代码> CXXFLACK<(代码)>用于将标志传递给C++编译器,而不是预处理器。当然,这在这里不会有任何区别,但这是一个好习惯,以防您有一个使用不同语言并依赖于隐式规则的项目,或者避免其他阅读您的Makefile并希望正确使用内置变量的人感到困惑。啊,是的,您是对的。我在那里有一种扭曲的理解。谢谢,谢谢。这是可行的,但是我在webrtc上有另一个错误,但这是另一个问题。。。