如何打印;使用CMake命令的符号?

时间:2017-04-13 17:35:45

标签: c++ linux boost cmake

我正在CMake下构建一个ExternalProject的Boost。我想交叉编译为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

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

1 个答案:

答案 0 :(得分:4)

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

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

作为旁注,您可以使用cmake -E <command>使您的cmake配置更加独立于平台:

COMMAND ${CMAKE_COMMAND} -E echo ...

它可能与echo无关,对于其他功能(创建/删除目录),请注意这一点。