Ich versuche, den Speicherort einer statischen Bibliothek eines anderen Projekts zu ermitteln. Ich habe versucht,CMAKE So erhalten Sie den Speicherort der Zieldatei
GET_PROPERTY (target_name TARGET-Test PROPERTY LOCATION) aber CMAKE gibt die folgenden Fehler
CMake Error at project.cmake:6 (get_property):
The LOCATION property may not be read from target "A".
Use the target name directly with add_custom_command, or use the generator
expression $<TARGET_FILE>, as appropriate.
Ich hat versucht, den Generator Ausdruck ohne Erfolg in der Fehlermeldung erwähnt zu verwenden.
MESSAGE($<TARGET_FILE:A>)
nur ausgibt, die genau die gleiche Zeichenfolge, so dass der Generator Ausdruck überhaupt nicht bewertet zu werden scheint:
$<TARGET_FILE:A>
ich die Documentation lesen. In den ersten Zeilen erwähnt es:
Generator Ausdrücke während Build-System Generation ausgewertet werden Informationen spezifisch für jede Build-Konfiguration zu erzeugen.
Wenn ich das richtig verstehe, dann werden zum Zeitpunkt der Auswertung der Nachrichtenfunktion die Generatorausdrücke nicht mehr ausgewertet? Also, was soll ich in diesem Fall machen?
beging ich ein minimales Beispiel für dieses Problem auf GitHub
EDIT:
Es tut mir Leid, ohne eine klare Erklärung meiner Absichten, die Frage in einem solchen Umwegen haben gefragt:
Mein Ziel ist, CMake zu bekommen, um eine einzelne (!) Statische Bibliothek für mein Projekt zu bauen, die ein anderer (der CMake nicht benutzt) benutzen kann. Ich würde immer noch die "normale" Auflösung der Abhängigkeiten für mein Projekt verwenden, aber die andere Person - die CMake nicht verwendet - müsste mehrere Bibliotheken manuell mit seinem Projekt verbinden, was etwas unbequem ist. Eine einzelne Bibliothek würde das lösen.
Auf meinem Weg zu versuchen, CMake zu statischen zwei statische Bibliotheken zu verknüpfen, habe ich irgendwo gelesen (Sorry, ich habe keinen Link gespeichert), dass zumindest wenn Sie Visual Studio als Compiler verwenden, können Sie das gewünschte Ergebnis erhalten wenn ich den vollständigen Pfad der statischen Bibliothek anhängen zu den statischen Linker-Flags wie das verknüpft werden:
set_target_properties(B PROPERTIES STATIC_LIBRARY_FLAGS >>>INSERT_PATH_HERE<<<)
, die in der Tat Arbeit. Aber jetzt würde ich muss händisch den vollständig qualifizierten Pfad einfügen, um die Variable dort
set_target_properties(B PROPERTIES STATIC_LIBRARY_FLAGS "/path/to/library.lib")
, die scheint nicht zu einem „guten“ Weg, um es mir zu tun. So experimentierte ich mit Generator Ausdrücke und kam mit dem folgenden:
set_target_properties(B PROPERTIES STATIC_LIBRARY_FLAGS $<TARGET_FILE:A>)
die nicht funktioniert, aus Gründen ich nicht ganz verstehen. Ich denke, set_target_properties unterstützt nur Generatorausdrücke nicht.Bei dem Versuch, mein Projekt zu arbeiten habe ich versucht,
MESSAGE($<TARGET_FILE:A>)
(wie oben dieser explenation angegeben) und dachte, wenn ich diese Aussage ich mein eigentliches Problem lösen könnte arbeiten würde. So habe ich die oben gestellte Frage gestellt. Ich wusste nicht, dass dies für die Leute, die mir antworten wollten, zu Verwirrung führen würde.
Nachricht kann nicht nehmen Generatorausdrücke. Da sie für jede Build-Konfiguration generiert werden, verhalten sie sich im Vergleich zu normalen Variablen sehr seltsam. Die Frage ist also wirklich, wo versuchen Sie den Zieleigenschaftsstandort zu verwenden? – IdeaHat
Ich möchte ein Linker-Flag erzeugen, wie so eine statische Bibliothek A in eine andere statische Bibliothek B zu verknüpfen: set_target_properties (B PROPERTIES STATIC_LIBRARY_FLAGS $) dies nicht funktioniert. Dies führt dazu, dass $ anstelle des Ergebnisses in die Projektdatei generiert wird. Mit message() konnte ich das Problem beheben. Ich denke, wenn ich es mit message() arbeiten kann, sollte es auch mit set_target_properties() funktionieren. –
Dirk