2009-12-04 1 views

Antwort

27

Die Art und Weise der Dokumentation the difference between include and include_lib beschreibt, ist:

include_lib zu include ähnlich ist, sollte aber nicht eine absolute Datei hinweisen. Stattdessen wird angenommen, dass die erste Pfadkomponente (möglicherweise nach der Variablensubstitution) der Name einer Anwendung ist.

Beispiel:

-include_lib("kernel/include/file.hrl").

Der Code-Server verwendet Code: lib_dir (Kernel), um das Verzeichnis der aktuellen (letzten) Version von Kernel zu finden, und dann gehört das Unterverzeichnis für die Datei Datei gesucht .hrl.

So in Ihrem Beispiel, brauchen Sie nicht die Version von eunit darauf hinweisen, dass Sie enthalten, können Sie die neueste eunit.hrl der eunit sind inklusive: s, die in Ihrer Bibliothek Pfad vorhanden ist.

+2

Ich glaube, Sie auch include_lib verwenden können Dateien, die Sie aus einer bestimmten Version einer installierten Anwendung hinzufügen möchten. –

10

Ein Unterschied, der zunächst nicht offensichtlich ist, ist, dass -include und -include_lib einen anderen Satz von Pfaden verwenden, wenn Sie nach Header-Dateien suchen. -include_lib verwendet tatsächlich den Codepfad, nicht den Headerdateipfad.

Daher erwartet das Flag erlc einen Pfad zum -include Suchpfad ist -I; das Flag für -include_lib ist -pa/-pz.

Bereits erwähnt ist die Tatsache, dass die Verwendung von -include_lib uns davor bewahrt, das Modul für eine bestimmte Bibliotheksversion anzugeben (und damit zu binden).

Darüber hinaus gibt es eine Konvention, dass internen Header innerhalb des src/ Unterverzeichnis eines Projekts gespeichert werden und enthalten mit -include. Externe Header (bestimmt durch andere Bibliotheken/Projekte verwendet werden) Dateien in include/ gespeichert werden und enthalten -include_lib verwenden.