Передать параметр с пробелами в CMake ExternalProject_Add BUILD_COMMAND

Я пытаюсь перекрестно скомпилировать bzip2 в Linux, используя команду CMake ExternalProject_Add(...).

Однако для кросс-компиляции 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'

Можно ли установить макрос Makefile с пробелами в нем, используя CMake BUILD_COMMAND? Спасибо!


person mevatron    schedule 15.11.2011    source источник


Ответы (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})

Это сработало!

person mevatron    schedule 16.11.2011
comment
Встроенный CFLAGS=-Wall -Winline -O2 -g -I${bzlib_MINGW_SRC}/include с двойными кавычками вокруг всего этого также будет эквивалентен конструкции, к которой вы пришли... - person DLRdave; 16.11.2011
comment
Хорошо знать! CMake великолепен =) - person mevatron; 16.11.2011