我正在CMake下将Boost构建为ExternalProject
。我想交叉编译手臂。为此,我尝试在构建步骤之前将using gcc : arm : arm-linux-gnueabi ;
写入user-config.jam。
但是,它似乎拒绝打印;
符号。我只能假设这是由于 CMake 将命令传递给 shell 的某种混乱造成的。我尝试使用 sed
内联编辑 project-config.jam,但结果相同。现在我正在尝试将行echo
到 user-config.jam。
这是我在CMakeLists中的ExternalProject命令.txt:
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 to user-config.jam.但是,它似乎将;
视为空字符。当我在;
字符周围使用单引号和双引号时,它也做同样的事情。
分号是 cmake 的列表分隔符。CMake 2.8.11 及更高版本有一个特殊的 $ 令牌:
COMMAND echo $<SEMICOLON> >> ./user-config.jam
作为旁注,您可以使用以下cmake -E <command>
使您的 cmake 配置更加独立于平台:
COMMAND ${CMAKE_COMMAND} -E echo ...
对于 echo 来说可能无关紧要,对于其他功能(创建/删除目录(来说,这是要记住的事情。