webentwicklung-frage-antwort-db.com.de

Fügen Sie die Headerdatei in einem anderen Verzeichnis in C++ ein

Ich habe C++ gelernt und bin auf folgende Frage gestoßen: Ich habe eine Verzeichnisstruktur wie:

 - current directory

  - Makefile

  - include

     - header.h

  - src

      - main.cpp

meine header.h:

#include <iostream> 

using namespace std;

void print_hello();

meine main.cpp:

#include "header.h"

int main(int argc, char const *argv[])
{
    print_hello();
    return 0;
}

void print_hello()
{
    cout<<"hello world"<<endl;
}

mein Makefile:

CC = g++
OBJ = main.o
HEADER = include/header.h 
CFLAGS = -c -Wall 

hello: $(OBJ) 
    $(CC) $(OBJ) -o [email protected]

main.o: src/main.cpp $(HEADER)
    $(CC) $(CFLAGS) $< -o [email protected]

clean: 
    rm -rf *o hello

Und die Ausgabe von make ist:

g ++ -c -Wall src/main.cpp -o main.o src/main.cpp: 1: 20: schwerwiegender Fehler: header.h: Keine solche Datei oder Verzeichnis Kompilierung beendet . Makefile: 10: Rezept für Ziel 'main.o' fehlgeschlagen make: *** [main.o] Fehler 1

Welche Fehler habe ich hier gemacht. Es ist frustrierend. Wirklich schätzen alle Ratschläge!

7
J. Lin

Sie haben dem Makefile mitgeteilt, dass include/header.h vorhanden sein muss, und Sie haben der C++ - Quelldatei mitgeteilt, dass sie header.h… benötigt, aber Sie haben dem Compiler nicht mitgeteilt, wo sich diese Header befinden (d. H. Im Verzeichnis "include").

Mach das:

CFLAGS = -c -Wall -Iinclude

Sie können entweder die Option -I zur Befehlszeile hinzufügen, um den Compiler anzuweisen, dort nach Header-Dateien zu suchen. Wenn Sie Header-Dateien im include/-Verzeichnis haben, sollte dieser Befehl für Sie funktionieren.

gcc -Iinclude/

Da Sie makefile verwenden, können Sie diese Option in das Makro CFLAGS in Ihr Makefile aufnehmen. 

CFLAGS = -Iinclude/ -c -Wall

OR

Sie können Header-Dateien mit #include "../include/header.h" einschließen. 

1
abhiarora

Vielleicht ändern Sie Ihre Include-Zeile: 

#include "include/header.h"

Angenommen, dort ist Ihre Kopfzeile - Ich mache diese Annahme aus Ihrem Makefile

0
daf