CMake: Reihenfolge der include-Verzeichnisse (Wie mix-system - und Benutzer-basierte include-Pfade?)

Habe ich ein CMake-Projekt umfasst und links gegen zwei Bibliotheken, sagen A und B (eigentlich ist es mehr als zwei und eine von Ihnen ist die boost-Sachen, aber das spielt eigentlich keine Rolle hier). Beide befinden sich über FindSomething.cmake Skripts, die (richtig) füllen Sie die standard-CMake-Variablen so, dass die include-Verzeichnisse Hinzugefügt werden, die über

INCLUDE_DIRECTORIES(${A_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${B_INCLUDE_DIRS})

und die Verknüpfung später geschieht über

TARGET_LINK_LIBRARIES(mytarget ${A_LIBRARIES} ${B_LIBRARIES})

Nun, das problem ist, dass beide Bibliotheken können entweder Ihren Wohnsitz in einem durch den Benutzer vor Ort oder in der system-Verzeichnisse (ich bin auf linux durch die Art und Weise, CMake 2.8.2) - oder in beiden. Lassen Sie uns sagen A ist nur in $HOME/usr/include und $HOME/usr/lib während B (boost in meinem Fall), wohnt in der system-Pfade (/usr/include und /usr/lib) UND im Benutzer-basierten Pfade - in verschiedenen Versionen. Die finden Skripts werden können, um zu finden, die entweder das system oder der Benutzer-library B funktioniert.

Das Problem beginnt, wenn ich verbinden möchte gegen B aus dem system-Pfade.${B_INCLUDE_DIRS} und ${B_LIBRARIES} richtig zeigen Sie auf das system-weiten Standorte der Header und Bibliotheken. Aber es gibt noch ${A_INCLUDE_DIRS} dass die Punkte auf eine nicht-system-include-Verzeichnis und letztlich auch die Header für die Bibliothek B stammen aus diesem Ort, während die Verknüpfung für B verwendet die version aus dem system-Pfade (über ${B_LIBRARIES}), die zu Konflikten führen, nämlich die Verknüpfung der Fehler.

Ändern der Reihenfolge der INCLUDE_DIRECTORIES Aussagen nicht scheinen, etwas zu ändern. Ich überprüfte die Herkunft der Symbole führen, dass die Verknüpfung von Fehlern über nm --line-numbers auf die Objekt-Dateien.

Was kann ich tun? Gibt es einen trick, um

  • Kraft, die die Reihenfolge der include-Verzeichnisse (auch wenn dies bedeutet den Vorrang einzuräumen, ein system Weg, obwohl es ist auch ein Benutzer-basierte angegebenen Ort)?
  • sagen CMake zu verwenden ${A_INCLUDE_DIRS} für alle Header aus A und ${B_INCLUDE_DIRS} für alle Header aus B?
InformationsquelleAutor janitor048 | 2011-10-13
Schreibe einen Kommentar