Я пишу сценарии 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
, но получил ту же ошибку.
Что я делаю не так?