In CMake versuche ich ein Projekt zu erstellen, das Bibliotheken für mehrere verschiedene Prozessorarchitekturen enthält, die von verschiedenen Toolchains kompiliert wurden. Für jede Architektur werden statische Bibliotheken in mehreren Unterverzeichnissen erstellt und dann in einer gemeinsam genutzten Bibliothek im Stammverzeichnis gesammelt. Bisher konnte ich das nicht herausfinden.CMake add_custom_command/_target in verschiedenen Verzeichnissen für die Kreuzkompilierung
Der nächstgelegene ich so weit gekommen sind, ist add_custom_command
und add_custom_target
in Unterverzeichnisse zu verwenden, um die .a-Dateien zu erzeugen, und dann versuchen, sie in eine .so im Stammverzeichnis wieder mit add_custom_command
und add_custom_target
zu sammeln. Aber wenn ich den .so Abhängigkeit Punkt in der Liste der benutzerdefinierten Befehlsausgänge machen, sagt die Make-Datei „Keine Regel zu machen ...“, weil die benutzerdefinierten Befehlsausgänge werden nicht aus dem Unterverzeichnis exportiert. Also habe ich versucht, den .so Abhängigkeit Punkt auf die Liste der benutzerdefinierten Ziele im Unterverzeichnis zu machen, und es beklagt, dass es keine Datei mit diesem Namen finden kann.
Um es in Codeform zu setzen, hier ist das, was ich in einem Unterverzeichnis haben:
add_custom_command(OUTPUT subout.a COMMAND ${MYAR} ...)
add_custom_target(subout_target DEPENDS subout.a)
im Stammverzeichnis, habe ich versucht, dies:
add_custom_command(OUTPUT my.so COMMAND ${MYLD} ... DEPENDS sub/subout.a)
add_custom_target(dll ALL DEPENDS my.so)
Und ich bekomme „Keine Regel make target 'sub/subout.a', benötigt von 'my.so'. Stop. " Das macht Sinn, weil add_custom_command
Ziele nicht aus einem Verzeichnis exportiert werden.
Und ich versuchte dies:
add_custom_command(OUTPUT my.so COMMAND ${MYLD} ... DEPENDS subout_target)
add_custom_target(dll ALL DEPENDS my.so)
Dies wird tatsächlich die Unter/subout.a Datei verursachen erzeugt werden, aber dann stirbt es und sagte: „Keine Regel Ziel‚subout_target‘zu machen ...“
denke ich, was ich wirklich möchte in der Lage ist, das add_library
Verhalten für mehrere unterschiedliche Architekturen zu imitieren. Aber anscheinend hat CMake nicht wollen, dass ich das tun ... :)
Irgendwelche Ideen?
Das hat es total behoben. Vielen Dank. Du hast mir eine Menge Frustration erspart. – boiler96
Ich bin froh und willkommen! – mloskot