2016-04-17 12 views
0

BEHOBEN: Ich bin nicht ganz sicher, warum und wie, aber wenn ich von -I ~/dlib-18.18 zu -I ../ dlib-18.18 wechselte, dann funktioniert es.g ++ erkennt kein Include-Verzeichnis

Ich versuche, ein Makefile zu schreiben, das ein Programm mithilfe der DLL-Bibliothek kompiliert. Ich habe heruntergeladen und installieren Sie die Bibliothek im Stammverzeichnis.

Der Header der CPP-Datei lautet wie folgt:

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

DLIB Ordner innerhalb DLIB-18.18 enthalten und optimization.h ist in der Tat im DLIB Ordner.

Unten ist mein Makefile (oder ein Teil davon). Ich habe das relevante Verzeichnis in CFLAGS aufgenommen. Doch während der Kompilierung, g ++ sagt, dass es nicht optimization.h (Keine solche Datei oder das Verzeichnis)

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

Sie erwähnen '.cpp', haben aber die Regel'% .o:% .c'. Sollte das nicht "% .o:% .c% .cpp" oder "CXXFLAGS" sein? –

+0

Also ist der Pfad zum Header '/ dlib-18.18/dlib/optimization.h'? Das klingt in zweifacher Hinsicht seltsam, in einem von ihnen wahrscheinlich falsch. Die möglicherweise falsche Lösung besteht darin, dass Sie die Header einer Bibliothek in einem speziellen Ordner im Stammordner haben. Bist du sicher, dass du nicht '/ usr/include/dlib-18.18','./Dlib-18.18' oder sowas gemeint hast? Zweitens werden die Header in einem 'dlib'-Unterverzeichnis von' dlib-18.18' gespeichert, oder meintest du '#include" dlib-18.18/optimization.h "'? –

Antwort

0

Sie haben Ihr Muster falsch finden: %.o: %.c bedeutet, dass die Regel ist, über das Kompilieren von .c Dateien (nicht.cpp Dateien).

Als Ergebnis gilt diese Regel nicht und GNU Make greift auf seine eigenen Standardregeln zum Kompilieren von C++ - Code zurück.

dies stattdessen versuchen, (vorausgesetzt, Sie mit DLIB konsistent sind, und Sie verwenden die .cpp Erweiterung für Ihre C++ Dateien):

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 $< 

Jetzt make -B und beobachten Sie die Compiler-Ausgang für -I~/dlib-18.18 Optionen auf der Flucht g ++ Befehlszeilen.

+0

Vielen Dank, dass Sie darauf hingewiesen haben. Nach dem Ändern von .c in .cpp bekomme ich immer noch den gleichen Fehler (Verzeichnis/Datei nicht gefunden) –

+0

Können Sie Ihre Frage bearbeiten und die Ausgabe von 'make' kopieren/einfügen? – xbug

+0

Die Ausgabe von make ist nicht sehr hilfreich, es schreit nur, dass die Datei nicht gefunden werden kann. –

Verwandte Themen