CMake & ExternalProject: не может найти определенный файл - PullRequest
1 голос
/ 29 декабря 2010

у нас есть несколько библиотек зависимостей в нашем хранилище. Основная часть - это сборка с помощью cmake. Теперь cmake-makefiles должен собирать библиотеки зависимостей, которые не имеют системы сборки cmake. Для одной конкретной библиотеки есть «Makefile.squirrel», который следует использовать. Файл cmakelists.txt для этой библиотеки:

cmake_minimum_required (VERSION 2.8)

include(ExternalProject)

ExternalProject_Add(squirrel,
    SOURCE_DIR "./"
    UPDATE_COMMAND ""
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND ""
    BUILD_COMMAND "make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel"
    INSTALL_COMMAND ""
    )

Однако при запуске make я получаю сообщение об ошибке:

[ 93%] Performing build step for 'squirrel,'
/bin/sh: make -f /home/enrico/projekte/projectname/dependencies/SQUIRREL2/Makefile.squirrel: not found
make[2]: *** [dependencies/SQUIRREL2/squirrel,-prefix/src/squirrel,-stamp/squirrel,-build] Error 127
make[1]: *** [dependencies/SQUIRREL2/CMakeFiles/squirrel,.dir/all] Error 2
make: *** [all] Error 2

ls -lA on / home / enrico / projekte / имя проекта / зависимости / SQUIRREL2 / Makefile.squirrel показывает, что файл существует.

Жесткое кодирование пути к файлу (не вариант для решения) тоже не работает.

есть идеи или намеки?

Спасибо, Enrico

Ответы [ 2 ]

3 голосов
/ 17 февраля 2011

Три наблюдения:

1) Вы используете «Белку» в качестве названия проекта.Аргументы функций CMake разделены пробелом, поэтому запятая является частью имени, которое вы дали.(Вероятно, не то, что вы хотите.)

2) Вы должны использовать:

SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"

, а не

SOURCE_DIR "./"

Поскольку "./" просто относительнов любом случае это полное имя пути.

3) Истинным источником вашей проблемы является значение BUILD_COMMAND:

BUILD_COMMAND "make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel"

Оно должно выглядеть следующим образом:

BUILD_COMMAND make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel

Если у вас естьпосле кавычек, то оболочка ищет фактический файл с именем "make -f ... / Makefile.squirrel", потому что CMake анализирует аргументы по пробелам, а двойные кавычки сообщают CMake, что это ровно один аргумент, который включает пробелы.Msgstr "" "Если в расширенном значении $ {CMAKE_CURRENT_SOURCE_DIR} есть пробелы, то CMake будет правильно использовать двойные кавычки (или экранировать, в зависимости от платформы / оболочки), когда генерирует команду в сгенерированных файлах сборки.

0 голосов
/ 30 декабря 2010

Вы можете попробовать написать скрипт, который вызывает make с правильным make-файлом. Просто экспортируйте CMAKE_CURRENT_SOURCE_DIR в переменную среды, которую читает сценарий.

...