Мне нужно ExternalProject_Add, чтобы вызвать только одну команду для внешнего проекта, чей make-файл выполняет все необходимые шаги. Мне нужно, чтобы эта команда была "make WITH_OPTION1 = no WITH_OPTION2 = no" в каталоге в верхней части исходного дерева внешнего проекта. Это один из нескольких десятков внешних проектов, которые мы используем. Большинство из них соответствуют модели 'configure; делать; make install ', но хорошая треть - нет, и я думаю, что это будет легко.
Если я попытаюсь вызвать команду make следующим образом:
ExternalProject_Add(build-example
PREFIX "${CMAKE_CURRENT_BINARY_DIR}/example"
DEPENDS ""
SOURCE_DIR "${PROJECT_TOPDIR}/External/example"
CONFIGURE_COMMAND ""
BUILD_COMMAND COMMAND make WITH_OPTION1=no WITH_OPTION2=no
INSTALL_COMMAND "")
Получившийся результат шаг make сделан из неправильного каталога, и поэтому Makefile не найден.
Если я добавлю опцию - C к команде make, она, похоже, будет использовать правильный каталог, но при этом игнорирует содержимое WITH_OPTION. Это не компилируется должным образом, потому что эти функции используют вещи, которые я не хочу предоставлять, и если это сработало, я все еще не хочу эти функции.
Если я добавлю кавычки вокруг всего желаемого сделать команду, это идет не так. По-видимому, команда передается в 'sh' таким образом, что sh терпит неудачу.
Если я использую механизм для передачи команды на шаг 'configure-file' и запускаю этот файл из BUILD_COMMAND, то CMake фактически пытается использовать поврежденный файл CMakeLists.txt, находящийся во внешнем проекте, и Интересно, что заставляет CMake думать, что он должен это делать?
Я просто хочу правильно запустить make-файл, используя CMake, чтобы организовать эту сборку в десятки других сборок, которые должны быть выполнены для сборки всего проекта.