【问题标题】:Make with header files in another directories使用其他目录中的头文件制作
【发布时间】:2014-09-10 16:54:35
【问题描述】:

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

...
#include "talk/examples/peerconnection/client/conductor.h"
#include "talk/examples/peerconnection/client/main_wnd.h"
...

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

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

【问题讨论】:

    标签: makefile webrtc


    【解决方案1】:

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

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

    【讨论】:

    • includes 由预处理器处理,应该是CPPFLAGS
    • @user657267 是的,CPPFLAGS 适用于所有事情。但是 OP 是在做 C++,所以我只是想更具体一点。
    • 如果你想具体一点,你应该使用CPPFLAGS,因为这是预处理器标志的正确变量。 CXXFLAGS 用于将标志传递给 c++ 编译器,而不是预处理器。当然,这根本不会有任何区别,但是如果您的项目使用不同的语言并依赖于隐式规则,或者避免其他人阅读您的 Makefile 并期望正确使用内置变量。
    • 啊,是的,你是对的。我在那里有一个扭曲的理解。谢谢。
    • 谢谢。那行得通,但是我对 webrtc 有另一个错误,但这是另一个问题...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多