Как включить из каталога? - PullRequest
0 голосов
/ 01 декабря 2011

Я пытаюсь добавить код проекта (назовите его b) в другой проект (назовите его a).Оба проекта компилируются и запускаются отдельно.Я просто скопировал папку проекта b в папку проекта a.В проекте a Makefile я добавил строки для компиляции проекта b с ним.Компилируется нормально.Теперь я хочу использовать код b.Но когда я пытаюсь #include "/bfolder/somefile.h", он не может найти файл.Чего мне не хватает в этом?Если я могу просто #include "somefileinsamedirectory.h", почему я не могу сделать #include "/bfolder/somefile.h"? `

Это Makefile, который я отредактировал, добавив код irobot_driver.

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;

Работающий #include "/ the / whole / path / to / a / file" -

#include "/home/sterling/irobot_driver/robot_driver_agent.h"

Ответы [ 3 ]

0 голосов
/ 01 декабря 2011

Можно, но когда вы объявляете путь, начинающийся с /some/path/to/file.h, он действительно будет искать файл в /some/path/to/file.h.Если вместо этого вы хотите bfolder/somefile.h, удалите / с начала.

Кроме того, в общем случае, если b - это библиотека, которую вы хотите использовать, лучше хранить ее в любом месте.папку, в которой он находится, и включайте и связывайте, используя опции -I, -L и -l gcc или аналогичные опции других компиляторов.Таким образом, если вы обновите b, вам не нужно копировать его в каждый проект, который его использует.

0 голосов
/ 01 декабря 2011

#include "/bfolder/..." означает, что папка bfolder находится в корневом каталоге файловой системы вашего компьютера.Если папка bfolder находится в том же каталоге, что и ваш исходный код, вы просто захотите #include "bfolder/somefile.h"

0 голосов
/ 01 декабря 2011

Попробуйте

#include "bfolder/somefile.h"

Вы добавляете косую черту в "/bfolder/somefile.h", что означает, что /bfolder будет в каталоге root .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...