Wie man einen relativen Pfad zu einem Ziel mit CMake?
Habe ich ein Projekt verwendet CMake zu generieren build-Skripte, und jede Plattform stellt die ausführbare Datei, die generiert werden, an einem anderen Ort. Wir haben einen nicht-Programmierer in unserem team, die nicht über build-tools und ich möchte in der Lage zu bündeln, bis alle Dateien, Skripts und ausführbare Dateien notwendig, um das Projekt auszuführen, so dass er das Projekt auszuführen.
Tun, ich habe ein benutzerdefiniertes Ziel, dass alle notwendige Dateien und Reißverschlüssen Ihnen bis. Es erzeugt auch ein sehr einfaches script (enthalten in der zip-Datei), dass er einfach auf, das sollte ein Skript ausgeführt wird, dann starten Sie die ausführbare Datei, etwa so:
add_custom_target(runcommand
COMMAND echo '\#!/bin/bash -eu' > run.command &&
echo 'cd `dirname $$0`' >> run.command &&
echo './scripts/prerun_script.sh && ${MY_EXECUTABLE}' >> run.command &&
chmod +x run.command)
Das problem mit diesem ist, dass MY_EXECUTABLE ist einen hartcodierten Pfad zu der ausführbaren Datei auf meinem system. Ich möchte, dass es ein relativer Pfad, so dass ich nur nehmen Sie das resultierende zip-Datei, entpacken Sie es irgendwo und führen Sie es von dort. Was ich möchte ist, um den Pfad zu MY_EXECUTABLE relativ zum root-Verzeichnis meines Projektes, damit dieses Skript ausgeführt werden kann, von überall.
- Ihre Frage ist über die relativen Pfade in CMake. Aber die Lösung für das problem, das du beschreibst, ist wirklich nicht das CMake Weg, Dinge zu tun. CMake zusammen mit CPack unterstützt die Installation von Zielen. Diese install-targets können dann verpackt werden entweder als zip -, tgz -, debian-Paket. All dies geschieht in einem Plattform-unabhängigen Weise. Ihre Lösung ist Plattform-spezifisch, da es verwendet ein bash-Skript. cmake.org/Wiki/CMake:Packaging_With_CPack
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie verwenden:
Konkret davon ausgehen, dass
MY_ROOT
enthält das root-Verzeichnis (es könnte sein, eine geeignete vordefinierte CMake-variable), damit wirdrel
zu den relativen PfadMY_EXECUTABLE
:Im Fall, wo Sie wollen Holen Sie sich ein Pfad relativ zum Projekt-Stammverzeichnis, können Sie
PROJECT_SOURCE_DIR
CMake-variable:Denken Sie daran, dass
MY_EXECUTABLE
muss enthalten vollständige Pfad zur Datei.Etwas wie dies funktionieren würde:
Grundsätzlich hackt der Basis-Pfad von
$MY_EXECUTABLE
. In diesem Beispiel habe ich gerade eingerichtetMY_EXECUTABLE
als test geben Sie einen vollständigen Pfad. Die one-line-äquivalent für das, was Sie wollen, ist:Ich denke, das meint
pwd
ist die Wurzel Ihres Projekts. Ansonsten sehen die Cmake-variable doc.(Nebenbei, das macht mich nostalgisch für die
ksh
Tage).%%
ist abhacken am Ende. Sie können auch%
oder#
, die ich denke, ist die größte übereinstimmung, wo Sie, wenn Sie double-up, entfernt es die größte übereinstimmung.