Ich baue Googles FlatBuffers als eine Abhängigkeit für mein eigenes Projekt und ich muss ein Schema zur Build-Zeit kompilieren. Ich möchte nicht BuildFlatBuffers.cmake
oder FindFlatBuffers.cmake
verwenden, weil ich eine bestimmte Version verwende und ich kann nicht darauf verlassen, dass es lokal installiert ist.Wie erhält man den Ausgabepfad eines von ExternalProject definierten Zieles?
Dies ist eine vereinfachte Version meiner CMakeLists.txt
:
ExternalProject_Add (
flatbuf
URL "https://github.com/google/flatbuffers/archive/v1.8.0.tar.gz"
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
)
add_custom_target (
flatbuf_schema
PREFIX ${FLATBUF_PREFIX}
DEPENDS flatbuf
COMMAND ${FLATBUF_PREFIX}/src/flatbuf-build/flatc --cpp ${FLATBUF_SCHEMA}
)
Es funktioniert gut für Make und Ninja, aber nicht in Xcode, die flatc
im Debug
Verzeichnis erstellt.
dachte ich über diese möglichen Lösungen:
- Verwendung
add_subdirectory
stattExternalProject_Add
so dass ich${FLATBUFFERS_FLATC_EXECUTABLE}
oder$<TARGET_FILE:flatc>
verwenden kann; - manuell zuweisen
RUNTIME_OUTPUT_DIRECTORY
fürflatbuf
; - Suche nach
flatc
in mehreren Pfaden (nicht tragbar; ich weiß auch nicht, wie man es zur Bauzeit passieren kann).
Ich versuchte (2) und (3) aber ohne Erfolg. Was (1) angeht, ich bin mir nicht sicher, ob das eine gute Idee ist. Wie kann ich Schemas auf tragbare Weise erstellen?
Nicht ganz sicher, was das Problem in Xcode ist. Eine Sache, die Sie tun können, wenn Sie wirklich feststecken, ist, was https://github.com/google/fplbase tut, da es auch von FlatBuffers abhängt und mindestens verwendet wird, um auf allen Plattformen gleichermaßen zu erstellen, einschließlich Xcode. – Aardappel
Das Problem mit Xcode ist, dass es flatc in einem anderen Verzeichnis erstellt: anstatt flatc in 'flatbuf-build /' zu haben, geht es in 'flatbuf-build/Build /'. –
Nicht nur * bauen * das externe Projekt, sondern ** installieren ** es. Das Projekt definiert vollständig sein Installationslayout, ein Build-Tool (in Ihrem Fall XCode) ändert es nicht. – Tsyvarev