簡體   English   中英

如何在CMake變量中去掉尾部空格?

[英]How to strip trailing whitespace in CMake variable?

我們正在努力改進CMake生產的makefile。 對於Clang,GCC和ICC,我們想添加-march=native 這樣做的塊看起來像:

# -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()

messages語句顯示來自uname的機器字符串有一個尾隨換行符:

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

生成UNAME_MACHINE的塊是:

# 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)

如何從CMake中的UNAME_MACHINE中刪除尾部換行符?

或者我應該切換到正則表達式matches ,不應該受到換行符的影響?

或者,我應該做別的嗎?


我們正試圖通過Current支持CMake 2.8。 這大致將我們帶回到Ubuntu 12.04 LTS。 當時還有其他一些操作系統可以將事情推遲一些。 雖然string(STRIP <string> <output variable>)看起來很有前途,但CMake不提供其文檔的版本信息 ,因此我們不確定它是否符合要求。

編輯它似乎剝離在3.0.2中不起作用,所以看起來我們還需要別的東西。

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

結果如下(我們期望xx86_64x ):

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

添加美元符號和花括號${UNAME_MACHINE}導致相同的原始問題(換行仍然存在)。

這條帶在變量<varname>中終止換行符:

string(REGEX REPLACE "\n$" "" <varname> "${<varname>}")

適用於自CMake 2.8以來參與的項目之一。

您還可以使用CMake的字符串STRIP命令,該命令將刪除前導和尾隨空格(以及尾隨換行符)。

string(STRIP <string> <output variable>)

execute_process有一個標志,用於在標准輸出或標准錯誤(或兩者)上剝離尾隨空格

            [OUTPUT_STRIP_TRAILING_WHITESPACE]
            [ERROR_STRIP_TRAILING_WHITESPACE]

https://cmake.org/cmake/help/v3.0/command/execute_process.html

添加美元符號和花括號$ {UNAME_MACHINE}會導致相同的原始問題(換行仍然存在)。

如果你使用花括號,你還需要引號。 例如:

string(STRIP "${UNAME_MACHINE}" UNAME_MACHINE)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM