Как установить аргумент команды в externalproject_add

Я хочу создать скрипт cmake для автоматической сборки zlib в моем проекте.

я добавил

externalproject_add(zlib
  PREFIX .
  # download step
  GIT_REPOSITORY git@github.com:madler/zlib.git
  GIT_TAG v1.2.8
  # configure step
  SOURCE_DIR zlib
  CONFIGURE_COMMAND ${CMAKE_SOURCE_DIR}/build/zlib/zlib/configure --archs="-arch ${ARCH}" --static
  # build step
  BUILD_COMMAND make
  BUILD_IN_SOURCE 1
  # install step
  INSTALL_DIR zlib-${ARCH}
  INSTALL_COMMAND make install
  # logging
  LOG_CONFIGURE 1
  LOG_BUILD 1
  LOG_INSTALL 1
  )

Но он генерирует команды конфигурации, как это:

'/Users/david/Documents/cmake_projects/build/zlib/zlib/configure' '--archs=' '-arch' 'x86_64"' '--static"'

Который я думаю не правильно цитируется.

Я перепробовал много трюков, но не могу заставить команду работать. Любая идея?

1 ответ

Решение

Двойные кавычки предотвращают разбиение строки. Я бы тоже отделил хотя бы ${ARCH_PARAMS} параметр в отдельную переменную, так что у вас будет что-то вроде этого:

set(ARCH_PARAMS "--archs='-arch ${ARCH}'")
...
...
CONFIGURE_COMMAND ${CMAKE_SOURCE_DIR}/build/zlib/zlib/configure ${ARCH_PARAMS} --static

Итак, это будет передаваться так:

'/ tmp / so_test / build / zlib / zlib / configure' '--archs =' - arch x64_86 '' '--static'

На примечании стороны, zlib Конфиг выглядит немного подозрительно, потому что он постоянно жалуется на сообщения об ошибках компилятора:

$./configure --static --archs = "- arch x86_64"

Проверка на gcc...

Отчет об ошибках компилятора слишком резок для./configure (возможно, удалить -Werror).

**./configure aborting.

Актуальные вопросы:

cmake: Как включить буквальную двойную кавычку в пользовательскую команду?

Другие вопросы по тегам