Простая проблема с Makefile - PullRequest
1 голос
/ 11 марта 2011

Я пытаюсь скомпилировать проект, который использует 2 .cc файла и .h

Я пишу Makefile, но он не компилируется, я получаю сообщение об ошибке:

 make
g++ -I/usr/local/include/ -I/usr/local/include/libfreenect -I. -I/usr/include/GL -fPIC -g -Wall `pkg-config --cflags opencv` -L/usr/X11R6/lib -L/usr/lib -L/lib simple_gesture.cc -o simple_gesture  `pkg-config --libs opencv` -L/usr/local/lib -lfreenect -lglui -lglut -lGLU -lGL 
simple_gesture.cc: In function ‘void depth_cb(freenect_device*, void*, uint32_t)’:
simple_gesture.cc:315: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘clock_t’
simple_gesture.cc:315: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long int’
/tmp/cck2APvc.o: In function `depth_cb(_freenect_device*, void*, unsigned int)':
/home/dany/ToCompile/kinect-apps-playground-fingertip-detection/simple_gesture.cc:313: undefined reference to `FeatureExtractor::Process(unsigned char*, int const*, int)'
collect2: ld returned 1 exit status
make: *** [simple_gesture] Error 1

Makefile это:

all: simple_gesture

CFLAGS=-fPIC -g -Wall `pkg-config --cflags opencv`
LIBS = `pkg-config --libs opencv`
INCLUDE = -I/usr/local/include/ -I/usr/local/include/libfreenect -I. -I/usr/include/GL
FREE_LIBS = -L/usr/local/lib -lfreenect
GL_LIBS = -lglui -lglut -lGLU -lGL 
GL_FLAGS = -L/usr/X11R6/lib -L/usr/lib -L/lib

feature_extractor: feature_extractor.h feature_extractor.cc
    $(CXX) $(INCLUDE) $(CFLAGS) $(GL_FLAGS) $? -o $@  $(LIBS) $(FREE_LIBS) $(GL_LIBS)

simple_gesture:  simple_gesture.cc
    $(CXX) $(INCLUDE) $(CFLAGS) $(GL_FLAGS) $? -o $@  $(LIBS) $(FREE_LIBS) $(GL_LIBS)

%.o: %.c
    $(CXX) -c $(CFLAGS) $< -o $@

clean:
    rm -rf *.o feature_extractor simple_gesture

Я думаю, что я плохо связываю файлы ..

Есть идеи?

[править] решена

этого было достаточно:

simple_gesture: feature_extractor.h feature_extractor.cc simple_gesture.cc $ (CXX) $ (ВКЛЮЧИТЬ) $ (CFLAGS) $ (GL_FLAGS) $? -o $ @ $ (LIBS) $ (FREE_LIBS) $ (GL_LIBS)

Ответы [ 2 ]

1 голос
/ 11 марта 2011

Очевидно, ваш simple_gesture.cc зависит от некоторой функции из FeatureExtractor класса. Поэтому вам следует рассмотреть возможность связывания feature_extractor.o с вашей simple_gesture .

0 голосов
/ 11 марта 2011

Вам нужно сделать так, чтобы двоичные файлы зависели от наличия объектных файлов, а не от исходных файлов. У вас уже есть правило для превращения источника в объект.

all: simple_gesture

LIBS = `pkg-config --libs opencv`
INCLUDE = -I/usr/local/include/ -I/usr/local/include/libfreenect -I. -I/usr/include/GL
FREE_LIBS = -L/usr/local/lib -lfreenect
GL_LIBS = -lglui -lglut -lGLU -lGL 
GL_FLAGS = -L/usr/X11R6/lib -L/usr/lib -L/lib
CFLAGS=-fPIC -g -Wall `pkg-config --cflags opencv` $(INCLUDE)

feature_extractor: feature_extractor.o
    $(CXX) $(GL_FLAGS) -o $@  $(LIBS) $(FREE_LIBS) $(GL_LIBS) $<

simple_gesture:  simple_gesture.o feature_extractor.o
    $(CXX) $(GL_FLAGS) -o $@  $(LIBS) $(FREE_LIBS) $(GL_LIBS) $<

%.o: %.cc
    $(CXX) -c $(CFLAGS) -o $@ $<

clean:
    rm -rf *.o feature_extractor simple_gesture
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...