【问题标题】:Pass parameter with spaces to CMake ExternalProject_Add BUILD_COMMAND将带空格的参数传递给 CMake ExternalProject_Add BUILD_COMMAND
【发布时间】:2011-12-29 23:17:09
【问题描述】:

我正在尝试使用 CMake 的 ExternalProject_Add(...) 命令在 Linux 中交叉编译 bzip2。

但是,为了交叉编译 libbzip,您必须修改一些 Makefile 宏以执行构建。这是我当前的交叉编译变量:

set(bzlib_CROSS CC=${CROSS_PREFIX}gcc AR=${CROSS_PREFIX}ar RANLIB=${CROSS_PREFIX}ranlib LDFLAGS=-L${bzlib_MINGW_SRC}/lib CFLAGS=-Wall -Winline -O2 -g -I${bzlib_MINGW_SRC}/include)

这个变量然后用于构建命令

set(bzlib_BUILD make ${bzlib_CROSS} PREFIX=${DEPENDENCY_DIR})

CMake 错误,因为它试图将 -O2、-g 等传递给 make,这当然不起作用,但是当我尝试在 CFLAGS 变量周围添加引号时,它会说

cc1: error: unrecognized command line option '-Wall -Winline -O2 -g -I/long/path/here/include'

是否可以使用 CMake 的 BUILD_COMMAND 设置带有空格的 Makefile 宏?谢谢!

【问题讨论】:

    标签: cmake cross-compiling


    【解决方案1】:

    想通了...我需要像这样将带引号的字符串拆分为自己的变量

    set(bzlib_CFLAGS "-Wall -Winline -O2 -g -I${bzlib_MINGW_SRC}/include")
    set(bzlib_CROSS CC=${CROSS_PREFIX}gcc AR=${CROSS_PREFIX}ar RANLIB=${CROSS_PREFIX}ranlib LDFLAGS=-L${bzlib_MINGW_SRC}/lib CFLAGS=${bzlib_CFLAGS})
    

    成功了!

    【讨论】:

    • 内联 "CFLAGS=-Wall -Winline -O2 -g -I${bzlib_MINGW_SRC}/include" 用双引号括住整个内容也将等同于您到达的构造...
    • 很高兴知道! CMake 很棒 =)
    猜你喜欢
    • 2014-10-21
    • 2014-08-22
    • 2017-05-07
    • 2016-04-08
    • 1970-01-01
    • 2022-12-24
    • 2020-10-11
    • 2016-01-19
    • 1970-01-01
    相关资源
    最近更新 更多