cmake - 如何去除 CMake 变量中的尾随空格?

标签 cmake text-processing uname

我们正在尝试改进 CMake 生成的 makefile。对于 Clang、GCC 和 ICC,我们要添加 -march=native 。执行此操作的 block 如下所示:

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

消息语句显示来自 uname 的机器字符串有一个尾随换行符:

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

产生的区 block 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)

如何从 UNAME_MACHINE 中删除尾随换行符在 CMake 中?

或者我应该切换到正则表达式 matches ,哪个不应该受到换行符的影响?

或者,我应该做点别的吗?

<小时/>

我们正在尝试通过 Current 支持 CMake 2.8。这大致让我们回到 Ubuntu 12.04 LTS。当时还有一些其他操作系统将事情推得更远。而string(STRIP <string> <output variable>)看起来很有希望,CMake does not supply version information with its documentation ,所以我们不确定它是否满足要求。

编辑看来剥离在 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} ,导致相同的原始问题(换行符仍然存在)。

最佳答案

execute_process 有一个标志,用于去除标准输出或标准错误(或两者)上的尾随空格

            [OUTPUT_STRIP_TRAILING_WHITESPACE]
            [ERROR_STRIP_TRAILING_WHITESPACE]

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

关于cmake - 如何去除 CMake 变量中的尾随空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39496043/

相关文章:

python - CMake FindPython3 无法在 Windows 上找到解释器

visual-studio - CMake删除 "Full Path of Source Code File in Diagnostics"选项/FC

c++ - 使用 GTest 的 CMake 无法正常工作

java - 在replaceAll()方法中调用replace替换字符串

perl - 读取固定宽度数据时保留空白列并添加分隔符

在 docker 容器内运行的 Python 程序依赖于 'uname -r'

CMake:在一个命令中将多个库链接到两个可执行文件

unix - 将类似 `find`的输出转换为类似 `tree`的输出

ubuntu - 验证在 Docker 容器中运行的 ubuntu 版本

linux - 如何修改 Linux 内核以更改 uname 返回的版本字符串?