Ошибка ExternalProject: файл попытался создать каталог в исходном каталоге - PullRequest
1 голос
/ 13 июля 2020

Я пишу сценарии CMake для своего проекта и пытаюсь вызвать другой компилятор для подмножества файлов, находящихся в подкаталоге дерева исходных текстов проекта.

Я обнаружил, что могу это сделать используя команду ExternalProject_Add.

Вот часть моего кода

Root CMakeLists.txt

set(CMAKE_DISABLE_SOURCE_CHANGES ON)
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)

add_subdirectory(src)

src / CMakeLists.txt

... 

include(ExternalProject)
ExternalProject_Add(subproject_name
        PREFIX subproject
        SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/subproject
        DOWNLOAD_COMMAND ""
        # UPDATE_COMMAND ""
        CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${PROJECT_SOURCE_DIR}/cmake/custom.toolchain.cmake
        
)

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

CMake Error at /usr/local/share/cmake-3.15/Modules/ExternalProject.cmake:1695 (file):
  file attempted to create a directory:
  /home/user/project/src/subproject into a source directory.
Call Stack (most recent call first):
  /usr/local/share/cmake-3.15/Modules/ExternalProject.cmake:3156 (_ep_set_directories)
  src/CMakeLists.txt:93 (ExternalProject_Add)


-- Configuring incomplete, errors occurred!

Я читал руководство по ExternalProject_Add несколько раз. В нем четко написано:

SOURCE_DIR ...

Если метод загрузки не указан, он должен указывать на существующий каталог, в котором внешний проект уже был распакован или клонирован / извлечен. .

DOWNLOAD_COMMAND ... Заменяет команду, используемую для шага загрузки (поддерживаются выражения генератора). Если указан этот параметр, все остальные параметры загрузки игнорируются. Предоставление пустой строки для эффективного отключения этапа загрузки.

Итак, на мой взгляд, CMake должен брать исходные коды в подкаталоге и создавать систему сборки в подкаталоге сборки.

Однако это пытается создать каталог src/subproject, который уже существует.

Я также пытался удалить аргумент PREFIX, но получил ту же ошибку.

Что я делаю не так?

1 Ответ

1 голос
/ 14 июля 2020

Похоже, что текущая реализация ExternalProject_Add конфликтует с опцией CMAKE_DISABLE_IN_SOURCE_BUILD. Вам нужно избегать этой опции, когда параметр SOURCE_DIR для ExternalProject_Add точек внутри вашего исходного дерева .

См. Отчет об ошибке: https://gitlab.kitware.com/cmake/cmake/-/issues/18811.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...