将带空格的参数传递给CMake ExternalProject_Add BUILD_COMMAND

mev*_*ron 5 cmake cross-compiling

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

然后将此变量用于构建命令

set(bzlib_BUILD make ${bzlib_CROSS} PREFIX=${DEPENDENCY_DIR})
Run Code Online (Sandbox Code Playgroud)

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

cc1: error: unrecognized command line option '-Wall -Winline -O2 -g -I/long/path/here/include'
Run Code Online (Sandbox Code Playgroud)

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

mev*_*ron 6

想出来......我需要将引用的字符串拆分成它自己的变量

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})
Run Code Online (Sandbox Code Playgroud)

这有效!

  • 内联的"CFLAGS = -Wall -Winline -O2 -g -I $ {bzlib_MINGW_SRC}/include"在整个事物周围用双引号也等同于你得到的结构...... (4认同)