Как создать каталог с помощью External_Add в cmake - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть установка, которая имеет вид:

git clone ...
mkdir build
cd build
cmake ..
make

Но я не могу этого сделать.Я пробовал что-то вроде:

ExternalProject_Add(my_ext_project
    GIT_REPOSITORY repo...
    SOURCE_DIR "project_src"
    CONFIGURE_COMMAND  mkdir build
    BINARY_DIR "project_src/build"
    BUILD_COMMAND cmake .. COMMAND make
 )

Но когда я пытаюсь собрать, я продолжаю получать

/bin/sh: cd: .../build: No such file or directory

Как мне создать каталог с ExternalProject_Add?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2019

Кажется, что ExternalProject_Add не нравится a бинарный каталог внутри источника один.Из документации ExternalProject :

Примечание : Если указан метод загрузки, любое существующее содержимое исходного каталога может быть удалено.Только метод загрузки URL-адреса проверяет, является ли этот каталог отсутствующим или пустым перед началом загрузки, останавливаясь с ошибкой, если он не пустой.Все остальные методы загрузки молча отбрасывают любое предыдущее содержимое исходного каталога.

К счастью, для большинства проектов каталог binary на самом деле не нуждается в , чтобы бытьвнутри source one: README проектов дают каталог <src>/build как просто пример каталога компоновки.

Для двоичного каталога вне исходного, ExternalProject_Add создает двоичный каталог автоматически .

Нужно просто убедиться, что опция BINARY_DIR стоит перед любой опцией, которая зависит от этогонастройка каталога:

ExternalProject_Add(my_ext_project
    GIT_REPOSITORY repo...
    SOURCE_DIR "project_src"
    # Setting BINARY_DIR should come **before** CONFIGURE_COMMAND and BUILD_COMMAND
    BINARY_DIR "project_bin"
    # It is a way to refer to source directory in the ExternalProject_Add COMMAND.
    CONFIGURE_COMMAND cmake <SOURCE_DIR>
    BUILD_COMMAND make
)

Обратите внимание, что такими командами CONFIGURE и BUILD являются по умолчанию для ExternalProject_Add, поэтому вы можете их опустить:

ExternalProject_Add(my_ext_project
    GIT_REPOSITORY repo...
    SOURCE_DIR "project_src"
    BINARY_DIR "project_bin"
    # "Standard" CMake project doesn't require to specify any COMMAND.
)
0 голосов
/ 21 апреля 2019

ОК, наконец-то разобрался. Команда «mkdir build» должна быть помещена после тега «PATCH_COMMAND» следующим образом:

ExternalProject_Add(my_ext_project
    GIT_REPOSITORY repo...
    SOURCE_DIR "project_src"
    #CONFIGURE_COMMAND  mkdir build ### wrong place for it! ###
    PATCH_COMMAND  mkdir build
    BINARY_DIR "project_src/build"
    BUILD_COMMAND cmake .. COMMAND make
 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...