2016-04-17 6 views
0

RESOLVED: Я не совсем уверен, почему и как, но когда я изменился с -I ~/dlib-18.18 на -I ../ dlib-18.18, тогда он работает.g ++ не распознает каталог include

Я пытаюсь написать makefile, который компилирует программу, используя библиотеку dlib. Я загрузил и установил библиотеку в каталог корней.

Заголовок файла .cpp выглядит следующим образом:

#include "dlib/optimization.h" 
#include <iostream> 

папка dlib входит в dlib-18.18 и optimization.h действительно в папке dlib.

Ниже представлен мой файл makefile (или его часть). Я включил соответствующий каталог в CFLAGS. Однако, во время компиляции, г ++ говорит, что он не может найти optimization.h (Нет такого файла или каталога)

EXUCUTABLE = graph 

CXX = g++ 
CXXFLAGS = -I. -I/usr/include/ -I~/dlib-18.18 
FLAGS = -g -O -Wall -Wextra -Werror -Wfatal-errors -std=c++11 -pedantic 

############### Rules ############### 

all: ${EXUCUTABLE} 

clean: 
    rm -f ${EXUCUTABLE} *.o 
## Compile step (.cpp files -> .o files) 

%.o: %.cpp 
    ${CXX} ${FLAGS} ${CXXFLAGS} -c $< 

graph: graph.o 
    ${CXX} ${FLAGS} $^ -o [email protected] 

Output for terminal make

The /dlib-18.18/dlib folder when accessed from the terminal

+0

Вы упомянули '.cpp', но имеете правило'% .o:% .c'. Разве это не должно быть '% .o:% .c% .cpp' или установить' CXXFLAGS'? –

+0

Итак, путь к заголовку: '/ dlib-18.18/dlib/optimization.h'? Это кажется странным по двум причинам, вероятно, неправильным для одного из них. Возможно, неверно, что у вас есть заголовки библиотеки, расположенные в специальной папке в корне. Вы уверены, что не имели в виду '/ usr/include/dlib-18.18','./Dlib-18.18', или что-то еще? Во-вторых, заголовки хранятся в поддиректории 'dlib'' dlib-18.18', или вы имели в виду '#include 'dlib-18.18/optimization.h?'? –

ответ

0

Вы получили ваш шаблон неправильно: %.o: %.c означает, что правило о компиляции .c файлов (не.cpp файлов).

В результате это правило не применяется, и GNU Make возвращается к собственному набору правил по умолчанию для компиляции кода на C++.

Попробуйте это вместо того, чтобы (если вы совместимы с dlib, и вы используете .cpp расширение для C++ файлов):

CXX = g++ 
CXXFLAGS = -I. -I/usr/include/ -I~/dlib-18.18 
FLAGS = -g -O -Wall -Wextra -Werror -Wfatal-errors -std=c++11 -pedantic 

# To get *any* .o file, compile its .cpp file with the following rule. 
%.o: %.cpp 
    $(CXX) $(FLAGS) $(CXXFLAGS) -c $< 

Теперь запустите make -B и посмотреть вывод компилятора для -I~/dlib-18.18 параметров на g ++.

+0

Спасибо, что указали это. Однако после изменения .c на .cpp я все равно получаю ту же ошибку (каталог/файл не найден) –

+0

Можете ли вы отредактировать свой вопрос и скопировать/вставить вывод 'make'? – xbug

+0

Результат make не очень полезен, он просто кричит, что файл не найден –

Смежные вопросы