2016-12-12 1 views
1

Ich möchte ein cmake-Skript erstellen, um die zlib automatisch in meinem Projekt zu erstellen.Wie man Kommandoargument in externalproject_add setzt

Ich habe

externalproject_add(zlib 
    PREFIX . 
    # download step 
    GIT_REPOSITORY [email protected]:madler/zlib.git 
    GIT_TAG v1.2.8 
    # configure step 
    SOURCE_DIR zlib 
    CONFIGURE_COMMAND ${CMAKE_SOURCE_DIR}/build/zlib/zlib/configure --archs="-arch ${ARCH}" --static 
    # build step 
    BUILD_COMMAND make 
    BUILD_IN_SOURCE 1 
    # install step 
    INSTALL_DIR zlib-${ARCH} 
    INSTALL_COMMAND make install 
    # logging 
    LOG_CONFIGURE 1 
    LOG_BUILD 1 
    LOG_INSTALL 1 
) 

Aber es Konfigurationsbefehle wie folgt erzeugen:

'/Users/david/Documents/cmake_projects/build/zlib/zlib/configure' '--archs=' '-arch' 'x86_64"' '--static"' 

Was ich denke nicht richtig zitiert wird.

Ich habe viele Tricks versucht, aber ich kann den Befehl nicht funktionieren. Irgendeine Idee?

+0

"_tried viele tricks_" - und die diese waren? –

Antwort

0

Doppelte Anführungszeichen verhindern, dass die Zeichenfolge aufgeteilt wird. Ich würde auch mindestens ${ARCH_PARAMS} Parameter in separate Variable trennen, so, Sie so etwas wie dieses haben würde:

set(ARCH_PARAMS "--archs='-arch ${ARCH}'") 
... 
... 
CONFIGURE_COMMAND ${CMAKE_SOURCE_DIR}/build/zlib/zlib/configure ${ARCH_PARAMS} --static 

Also, es werde als diese übergeben werden:

‚/ tmp/so_test/build/zlib/zlib/configure‘ '--archs =' - Bogen x64_86 '' '--static'

Auf der Seite beachten, Nähte zlib Config nicht ganz geheuer, weil sie beschweren sich über Compiler-Fehler hält Berichterstattung:

$ configure --static --archs = "- Bogen x86_64"

Checking für gcc ...

Compiler Fehlerberichterstattung für configure zu hart ist (vielleicht Werror entfernen).

** ./configure abbrechen.

Relevante Fragen:

cmake: How to include literal double-quote in custom command?

+0

Eigentlich genügt es, das ganze Argument zu zitieren: '" --archs = -arch xxx "'. cmake wird das Zitat machen. Und es funktioniert ziemlich gut. – davidshen84

+0

@ davidshen84 mhm. Könnten Sie bitte die Version von CMake erklären, die Sie verwenden? Weil es auf meiner Maschine nicht ist. Ich nehme an, dass einige Änderungen auf der CMake-Mailing-Liste erwähnt wurden, die Auto-Quoting und Kompatibilität mit älteren Versionen beinhalten. – Kamiccolo

+0

Ich benutze '3.6.1'. Aber ich denke nicht, dass es neu ist. Sie können dem IRC-Kanal beitreten. Ich habe diesen Trick dort gelernt. – davidshen84