Erstellen eines Verzeichnisses in CMake


143

In CMake möchte ich ein Verzeichnis erstellen, falls es noch nicht vorhanden ist. Wie kann ich das machen?

Antworten:


250

Wann möchten Sie das Verzeichnis erstellen?

Bei der Erstellung des Build-Systems

So erstellen Sie ein Verzeichnis, wenn CMake das Build-System generiert:

file(MAKE_DIRECTORY ${directory})

Zur Bauzeit

Im add_custom_command()Befehl (der dem generierten Erstellungssystem eine benutzerdefinierte Erstellungsregel hinzufügt) und im add_custom_target()Befehl (der ein Ziel ohne Ausgabe hinzufügt, damit es immer erstellt wird) geben Sie die Befehle an, die zur Erstellungszeit ausgeführt werden sollen. Erstellen Sie ein Verzeichnis, indem Sie den Befehl ausführen ${CMAKE_COMMAND} -E make_directory. Beispielsweise:

add_custom_target(build-time-make-directory ALL
    COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})

Zur Installationszeit

Um ein Verzeichnis zur Installationszeit zu erstellen,

install(DIRECTORY DESTINATION ${directory})

Kurz und bündig. Trifft das Ziel sofort! Vielen Dank.
Truthadjustr

25

Um ein Verzeichnis zur Installationszeit zu erstellen,

install(DIRECTORY DESTINATION ${directory})

Diese werden beide zur Konfigurationszeit ausgeführt:

file(MAKE_DIRECTORY ${directory})
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})

Verwenden Sie zum Erstellen während des Builds ein benutzerdefiniertes Ziel:

add_custom_target(mytargetname ALL COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})

10

Zusätzlich zu Chin Huangs Antwort können Sie dies auch zur Erstellungszeit tun mit add_custom_command:

add_custom_command(TARGET ${target_name} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})

Sie können auch den Zeitpunkt ändern, zu dem Ihr Verzeichnis mit PRE_BUILD| erstellt wird PRE_LINK| POST_BUILDParameter.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.