【问题标题】:How to print a ; symbol using CMake command?如何打印 ;使用 CMake 命令的符号?
【发布时间】:2017-04-13 17:35:44
【问题描述】:

我在 CMake 下将 Boost 构建为 ExternalProject。我想交叉编译arm。为此,我尝试在构建步骤之前将using gcc : arm : arm-linux-gnueabi ; 写入 user-config.jam。

但是,似乎拒绝打印; 符号。我只能假设这是由于 CMake 将命令传递给 shell 造成的某种破坏。我尝试使用sed 内联编辑 project-config.jam,但结果相同。现在我正在尝试echo user-config.jam 的行。

这是我在 CMakeLists.txt 中的 ExternalProject 命令:

ExternalProject_Add(Boost
    URL https://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/downloads/boost_1_59_0
    BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/downloads/boost_1_59_0
    UPDATE_COMMAND ""
    PATCH_COMMAND ""

    CONFIGURE_COMMAND ./bootstrap.sh --prefix="${CMAKE_BINARY_DIR}/boost_1_59_0" --without-icu
    COMMAND echo using gcc : arm : arm-linux-gnueabi > ./user-config.jam
    COMMAND echo ; >> ./user-config.jam
    BUILD_COMMAND "./b2"
    INSTALL_COMMAND ./b2 install toolset=gcc-arm --prefix=${CMAKE_CURRENT_SOURCE_DIR}/deps/boost
    INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/deps/boost
)

详细的 CMake 打印:

cd /home/matthew/Desktop/arm/downloads/boost_1_59_0 && echo using gcc : arm : arm-linux-gnueabi > ./user-config.jam
cd /home/matthew/Desktop/arm/downloads/boost_1_59_0 && echo >> ./user-config.jam

您可以看到它将 using ... gnueabi 行很好地打印到 user-config.jam。但是,它似乎将; 视为空字符。当我在 ; 字符周围使用单引号和双引号时,它也会做同样的事情。

【问题讨论】:

    标签: c++ linux boost cmake


    【解决方案1】:

    分号是 cmake 的列表分隔符。 CMake 2.8.11 及更高版本有一个特殊的 $ 标记:

    COMMAND echo $<SEMICOLON> >> ./user-config.jam
    

    附带说明,您可以使用 cmake -E &lt;command&gt; 使您的 cmake 配置更加独立于平台:

    COMMAND ${CMAKE_COMMAND} -E echo ...
    

    echo 可能无关紧要,其他功能(创建/删除目录)需要牢记。

    【讨论】:

    • 我应该指定,引号(单引号和双引号)没有帮助。
    • 详细输出看起来与您发布的引号不同吗?
    • 命令 ${CMAKE_COMMAND} -E echo ";" >> ./user-config.jam 现在打印为 cd /home/matthew/Desktop/arm/downloads/boost_1_59_0 && /usr/bin/cmake -E echo >> ./user-config.jam
    • cmake 使用 ;作为列表分隔符。尝试使用反斜杠转义。在 cmake >= 2.8.11 中还有一个特殊的 $ 标记
    • 在更简洁的测试中,看起来引号内的单个反斜杠会打印分号。
    猜你喜欢
    • 2011-03-23
    • 2020-12-11
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2013-06-28
    相关资源
    最近更新 更多