Wie entferne ich abschließende Leerzeichen in CMake-Variablen?

Wir versuchen, die von CMake erstellten Makefiles zu verbessern. Für Clang, GCC und ICC möchten wir @ hinzufüge-march=native. Der Block dazu sieht so aus:

# -march=native for GCC, Clang and ICC on i386, i486, i586, i686 and x86_64.
message(STATUS, "1")
message(STATUS, "Compiler: x${CMAKE_CXX_COMPILER_ID}x")
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
    message(STATUS, "2")
    message(STATUS, "Machine: x${UNAME_MACHINE}x")
    if (("${UNAME_MACHINE}" MATCHES "i.86") OR ("${UNAME_MACHINE}" STREQUAL "x86_64"))
            message(STATUS, "3")
        if (CMAKE_VERSION VERSION_LESS 2.8.12)
            add_definitions(-march=native)
        else()
            add_compile_options(-march=native)
        endif()
    endif()
endif()

Die Nachrichtenanweisungen zeigen den Maschinenstring vonuname hat einen nachgestellten Zeilenumbruch:

STATUS,1
STATUS,Compiler: xGNUx
STATUS,2
STATUS,Machine: xx86_64
x

Der zu erzeugende BlockUNAME_MACHINE ist:

# We need the output 'uname -m' for Unix and Linux platform detection
#    Be prepared for i386-i686, amd64, x86_64, arm, arm64, armel, armhf,
#    mips, mips64, aarch32 and aarch64 (for starters)
set (UNAME_CMD "uname")
set (UNAME_ARG "-m")
execute_process(COMMAND ${UNAME_CMD} ${UNAME_ARG}
    WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
    RESULT_VARIABLE UNAME_RESULT
    OUTPUT_VARIABLE UNAME_MACHINE)

Wie entferne ich den abschließenden Zeilenumbruch vonUNAME_MACHINE in CMake?

Oder sollte ich zu einem regulären Ausdruck wechselnmatches, welches soll von der newline nicht betroffen sein?

Oder, soll ich was anderes machen?

Wir versuchen CMake 2.8 über Current zu unterstützen. Das bringt uns ungefähr zu Ubuntu 12.04 LTS zurück. Es gibt einige andere Betriebssysteme um diese Zeit, die die Dinge ein wenig zurückschieben. Währendstring(STRIP <string> <output variable>) sieht vielversprechend aus,CMake liefert keine Versionsinformationen mit seiner Dokumentation, wir sind uns also nicht sicher, ob es den Anforderungen entspricht.

BEARBEITE es scheint, dass Strippen in 3.0.2 nicht funktioniert, also brauchen wir etwas anderes.

# Strip lead and trailing whitepasce
string(STRIP UNAME_MACHINE, UNAME_MACHINE)

Ergebnisse im Folgenden (wir erwartenxx86_64x):

STATUS,1
STATUS,Compiler: xGNUx
STATUS,2
STATUS,Machine: xUNAME_MACHINE,x

Hinzufügen von Dollarzeichen und geschweiften Klammern,${UNAME_MACHINE}, führt zu demselben ursprünglichen Problem (der Zeilenumbruch ist noch vorhanden).

Antworten auf die Frage(8)

Ihre Antwort auf die Frage