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

标签 c++ linux boost cmake

我在 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。但是,它似乎将 ; 视为空字符。当我在 ; 字符周围使用单引号和双引号时,它也会做同样的事情。

最佳答案

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

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

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

COMMAND ${CMAKE_COMMAND} -E echo ...

这对于 echo 可能无关紧要,对于其他功能(创建/删除目录)来说,这是需要牢记的事情。

关于c++ - 如何打印 ;使用 CMake 命令的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43398478/

相关文章:

c++ - 如何在 C++17 中制作模板包装器/装饰器

c++ - 多个 tcp 套接字,一个停止

c - Linux 上基于 C 的事件循环进程中的异步计时器

c++ - std::tuple get() 成员函数

c++ - Boost::Bind noncopyable error with shared_ptr <tcp::socket>

c++ - 不是 lambda 函数中的常量表达式

c++ - 如何让Boost::random和Matlab产生相同的随机数

c++ - 如何将 char* 从 C 传递到 CPP?

linux - 如何将 find 的输出用于 if 条件?

linux - 如何在 Linux 内核中加入一个线程?