Sonntag, April 5, 2020

Gibt es eine LINK_DIRECTORIES oder entsprechende Eigenschaft in CMake?

Ich habe ein Projekt angelegt mit einer großen Anzahl von link_directories () – Befehle. Ich würde jetzt gerne speichern den resultierenden string Verzeichnisse in eine variable. Für include_directories() dies ist einfach mit

get_property( test_INCLUDE_DIRECTORIES TARGET test PROPERTY INCLUDE_DIRECTORIES )

allerdings scheint es keine LINK_DIRECTORIES Eigenschaft zu tun

get_property( test_LINK_DIRECTORIES TARGET test PROPERTY LINK_DIRECTORIES )

Gibt es eine Möglichkeit um eine Liste von link-Verzeichnisse verwendet für ein Ziel?

(Anmerkung: ich weiß, ich könnte manuell verfolgen Sie die link-Verzeichnisse in eine variable und mich dann mit einem einzigen link_directories (), aber es scheint nicht sehr sauber)

  • Warum brauchen Sie die Liste als variable?
  • Ich will senden diesen link-Verzeichnisse „bis“ zu einem übergeordneten Projekt, so dass das übergeordnete Projekt-link gegen die Bibliotheken angegeben, in der das Kind richtig. Irgendwann werde ich umgehen, um die Verwendung von absoluten Bibliothek-Pfade und so ganz vermeiden link_directories (), aber jetzt……
InformationsquelleAutor user2746401 | 2014-08-06

1 Kommentar

  1. 7

    Werfen Sie einen Blick auf die LINK_DIRECTORIES directory-Eigenschaft.

    Der Punkt ist, dass link_directories arbeitet auf einer pro-Verzeichnis Grundlage (der Befehl wirkt sich auf alle Ziele, die in der gleichen CMakeLists, sowie die Zielvorgaben für alle seine Unterverzeichnisse), im Gegensatz zu, zum Beispiel target_include_directories die arbeiten auf einer pro-Ziel-Grundlage.

    Können Sie die Abfrage des Wertes der Immobilie mit:

    get_property(test_LINK_DIRECTORIES DIRECTORY PROPERTY LINK_DIRECTORIES)
    

    wenn der Aufruf aus dem gleichen Verzeichnis wie die link_directories nennen. Andernfalls müssen Sie dem (vollständigen oder relativen) Pfad als zusätzliches argument nach DIRECTORY. Ich kenne leider keinen Weg erhalten Sie das passende Verzeichnis eines vorhandenen Ziels.

    Beachten Sie, dass im Allgemeinen die die Verwendung von link_directories wird abgeraten in CMake, das ist wahrscheinlich der Hauptgrund, warum es nicht unterstützt wird, sehr gut. Es sei denn, Sie haben sehr gute Gründe das nicht zu, sollten Sie immer den stick mit der full library-Pfade übergeben target_link_libraries. Es wird sparen Sie viele Kopfschmerzen auf lange Sicht.

    • Danke! In der verlinkten doc die Eigenschaft markiert ist, als für das Debuggen verwenden. Bedeutet das, dass es verschwindet?
    • Ich kenne keine solchen Pläne. Der Kommentar bezieht sich wohl auf die Tatsache, dass Sie können stellen Sie diese Eigenschaft nur durch link_directories und nicht durch die Verwendung set_property.
    • Ich bin jetzt versuchen, verwenden Sie die vollständige Bibliothek-Pfade aber bin immer Kopfschmerzen mit denen. Siehe stackoverflow.com/questions/25423905/…

Kostenlose Online-Tests