如何从目录中包含?

时间:2011-11-30 21:14:57

标签: compilation include compiler-warnings

我正在尝试将项目(称为b)代码添加到另一个项目(称为a)。这两个项目都是单独编译和运行的。我刚刚将项目b的文件夹复制到项目a的文件夹中。在项目a的{​​{1}}中,我添加了用它来编译项目Makefile的行。它汇编得很好。现在我想使用b的代码。但是当我尝试b时,它无法找到该文件。我对此缺少什么?如果我可以#include "/bfolder/somefile.h",为什么我不能#include "somefileinsamedirectory.h"

这是我编辑过的包含irobot_driver代码的Makefile。

#include "/bfolder/somefile.h"

有效的#include“/ / / / / / / / /文件”是 -

INCLUDE = -I/usr/X11R6/include -I/home/sterling/irobot_driver
CC=g++ 
CFLAGS=-w -D LINUX -fpermissive 
CFLAGS_R= -w -D LINUX -O3 -fpermissive 
CFLAGS_D=-w -D LINUX -fpermissive 
OBJ= obj
OBJ_DEBUG= obj_debug
OBJDIR= release
SRCDIR= src

LDFLAGS= -L/usr/X11R6/lib$(LIBSELECT) -lGL -lfltk -lfltk_gl -lXext -lX11 -lglut -lGLU -lfltk_images

SOURCES_RAW=codeprofiler.cpp gametimer.cpp timer.cpp timeprofile.cpp vector4.cpp matrix.cpp agent.cpp agentcontroller.cpp dummy.cpp evader.cpp pursuer.cpp goal.cpp player.cpp graphdata.cpp graph.cpp cubiccoefs.cpp segment.cpp trajectory.cpp anode.cpp arrayvector4.cpp color.cpp drawcomponent.cpp drawcontroller.cpp flags.cpp global.cpp map_analyzer.cpp minheap.cpp node.cpp quadtree.cpp queue.cpp results.cpp sensor.cpp settings.cpp utility.cpp world.cpp gui.cpp main.cpp logger.cpp parameters.cpp counter.cpp polygon.cpp line.cpp

TARGET:= pursuit_evasion
TARGETD:= pursuit_evasion_d
TARGETP:= pursuit_evasion_p
TARGETW32:= pursuit_evasion_w32

OBJECTS:=$(SOURCES_RAW:.cpp=.o)
OBJECTS:=$(patsubst %.o,$(OBJDIR)/%.o, $(OBJECTS))

SOURCES:=$(SOURCES_RAW)
SOURCES:=$(patsubst %.cpp,$(SRCDIR)/%.cpp, $(SOURCES))

OBJ_DEBUG:=$(SOURCES_RAW:.cpp=.o)
OBJ_DEBUG:=$(patsubst %.o,debug/%.o, $(OBJ_DEBUG))

OBJECTS_P:=$(SOURCES_RAW:.cpp=.o)
OBJECTS_P:=$(patsubst %.o,profile/%.o, $(OBJECTS_P))

OBJDIR=obj

all: $(TARGET)

#--- Release 
$(TARGET): $(OBJECTS)
    $(CC) -w -D LINUX $(INCLUDE) $^ -o $@ $(LDFLAGS)
    cd /home/sterling/irobot_driver; sudo make -j2

release/%.o: src/%.cpp
    $(CC) -c $< $(CFLAGS_R) -o $@ 

#--- Debug
debug: $(TARGETD)

$(TARGETD): $(OBJ_DEBUG)
    $(CC) -w -D LINUX $(INCLUDE) $^ -o $@ $(LDFLAGS)
    cd /home/sterling/irobot_driver; sudo make -j2

debug/%.o: src/%.cpp
    $(CC) -c -g $< $(CFLAGS)-o $@ 

#-- Profile
profile: $(TARGETP)

$(TARGETP): $(OBJECTS_P)
    $(CC) -w -g -pg -D LINUX $(INCLUDE) $^ -o $@ $(LDFLAGS)

profile/%.o: src/%.cpp
    $(CC) -c -g -pg $< $(CFLAGS)-o $@ 

win32: $(TARGETW32)

$(TARGETW32): $(OBJECTS)
    $(CC) -w -D WIN32 $(INCLUDE_W32) $^ -o $@ $(LDFLAGS)

.PHONY : clean
clean:
    rm -f release/*.o
    rm -f debug/*.o
    rm -f profile/*.o
    rm -f $(TARGET) $(TARGETD) $(TARGETP)
    cd /home/sterling/irobot_driver; make clean;

3 个答案:

答案 0 :(得分:0)

尝试

#include "bfolder/somefile.h"

您在"/bfolder/somefile.h"中包含一个前导斜杠,这意味着/bfolder将位于 root 目录中。

答案 1 :(得分:0)

您可以,但是当您声明以/some/path/to/file.h开头的路径时,它将真正在/some/path/to/file.h查找文件。如果您想要bfolder/somefile.h,请从头开始删除/

此外,通常情况下,如果b是您要使用的库,最好将其保留在它所驻留的任何文件夹中,并使用-I {{1}进行包含和链接和gcc的-L选项,或其他编译器的类似选项。这样,如果您更新-l,则无需将其复制到使用它的每个项目。

答案 2 :(得分:0)

#include "/bfolder/..."暗示bfolder位于计算机文件系统的根目录中。如果bfolder与源代码位于同一目录中,那么您只需要#include "bfolder/somefile.h"