2009-02-12 15 views
12

Ich verwende für die Verwaltung meiner Cross-Plattform-Builds, und ich habe alles außer diesem Problem ausgearbeitet. Ich setze RUNTIME_OUTPUT_DIRECTORY auf ein bin/ Verzeichnis, in dem ich Dateien gespeichert habe. Unter Linux funktioniert das gut. Unter Windows werden die ausführbaren Dateien je nach Buildtyp in das Unterverzeichnis Debug/Release gestellt. Gibt es eine Möglichkeit, zu erhalten, um die ausführbare Datei in das richtige Verzeichnis zu kopieren, oder (noch besser) aufzuhören, diese Unterverzeichnisse insgesamt zu verwenden?cmake RUNTIME_OUTPUT_DIRECTORY unter Windows

+0

Ich nehme an, Sie Cmake verwenden Visual Studio-Lösung/Projekt-Dateien zu generieren, ist das richtig? Welche Version von Visual Studio wird verwendet? Welche Version von cmake? –

+0

Ja, ich verwende CMake, um die Lösungsdateien zu erzeugen (cmake 2.6, VS 2005) – thekidder

Antwort

9

Ich habe die Fein Präfix Eigenschaft hack von Ogapo seit Jahren verwendet. Es klappt.

Aber ab CMake Version 2.8 gibt es offizielle Unterstützung für die Vermeidung der Release/Debug Unterverzeichnisse auf Windows.

Verwenden Sie entweder die globalen CMAKE_<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION> Variablen oder die pro-Ziel <ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION> Eigenschaften, etwa so:

SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}") 
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}") 
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}") 
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}") 
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}") 
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}") 
+0

Ich habe nicht nach einer Lösung gesucht. Und auf diese Antwort stieß ich gleichzeitig auf diesen Link: https://cmake.org/Bug/view.php?id=9163. Diese Antwort verwendet genau die gleiche Technik. Ich denke, diese Antwort ist die beste Lösung bisher. Funktioniert ziemlich gut für mich. Vielen Dank. –

-4

Sie müssen den Build-Speicherort Ihrer Visual Studio-Projekte ändern. Wechseln Sie zu Projekteigenschaften, und geben Sie auf der Registerkarte Kompilieren den Befehl 'Ausgabepfad erstellen' an, wo immer Sie möchten.

Hinweis

Sie wissen nicht, wie relevant das ist, wie ich über CMake nicht wissen.

Sie können das folgende Token in Visual Studio erstellen Ereignisse verwenden:

$(TargetPath)

Dies ist der Pfad zu dem Ort sein wird, dass Ihr Projekt gebaut wird so je nach Projekteinstellungen wird dies entweder die seine Debug- oder Release-Ordner.

1

Einige Cmake-Variablen haben spezifische Versionen.

CMAKE_C_FLAGS 
    the compiler flags for compiling C sources. Note you can also specify switches with ADD_DEFINITIONS(). 
CMAKE_C_FLAGS_DEBUG 
    compiler flags for compiling a debug build from C sources. 
CMAKE_C_FLAGS_RELEASE 
    compiler flags for compiling a release build from C sources. 
CMAKE_C_FLAGS_RELWITHDEBINFO 
    compiler flags for compiling a release build with debug flags from C sources. 

Ich habe nicht diese Vars existieren überprüft, aber vielleicht RUNTIME_OUTPUT_DIRECTORY_DEBUG & & RUNTIME_OUTPUT_DIRECTORY_RELEASE auf dieselbe Einstellung funktionieren könnte.

10

Ich bin nicht sicher, ob diese Verzeichnisse sind absichtlich oder um einen Fehler, sondern auf die Gefahr von vorne Unverträglichkeit könnten Sie hinzufügen:

if (MSVC_IDE) 
    # hack to get around the "Debug" and "Release" directories cmake tries to add on Windows 
    set_target_properties (${NAME} PROPERTIES PREFIX "../") 
endif() 

dies für mich wurde bisher

+2

Das funktioniert auch für mich. Für LIB-Dateien verwenden Sie SET_TARGET_PROPERTIES ($ {PROJECT_NAME} -Eigenschaften IMPORT_PREFIX "../") – Torleif

1

arbeiten, die beste Antwort Ich habe gefunden, ist einfach CMake install commands für jedes meiner Ziele und Datendateien schreiben, und richten Sie den MSVC Debugger, um aus dem Installationsverzeichnis ausführen. Dies hat den zusätzlichen Vorteil, CPack zum Erstellen von Installationsprogrammen zu verwenden.

1

Für mich ist ein global:

set(CMAKE_STATIC_LIBRARY_PREFIX "../lib") 
set(CMAKE_SHARED_LIBRARY_PREFIX "../lib") 

taten die Arbeit, so habe ich es nicht gesetzt für jede Bibliothek (CMake 2.8.4)

Verwandte Themen