ошибка cmake add_subdirectory только с командной строкой cmake, но не с cmake-gui в Windows (с исходным кодом, проверенным в корне буквы диска)

Я работаю над 3dtk, который использует CMake для сборки. Вы можете найти его CMakeLists.txt здесь: https://sourceforge.net/p/slam6d/code/HEAD/tree/trunk/CMakeLists.txt

В некоторых местах он использует директиву add_subdirectory и никогда не предоставляет второй аргумент (binary_dir).

Кажется, это не проблема при вызове ccmake вне дерева в Linux или при использовании cmake-gui в Windows, поскольку в обоих случаях проект настраивается успешно.

Но когда я запускаю простой cmake в окнах в командной строке, я получаю несколько таких ошибок:

CMake Error at Z:/CMakeLists.txt:471 (add_subdirectory):
  add_subdirectory not given a binary directory but the given source
  directory "Z:/src/slam6d" is not a subdirectory of "Z:/". When specifying
  an out-of-tree source a binary directory must be explicitly specified.

Я подозреваю, что мне просто не хватает опции команды cmake, но какой именно?

Так же, как с cmake-gui в Windows, где я указываю другой путь для Where to build the binaries, чем для where is the source code, чтобы сделать сборку вне дерева, и так же, как с ccmake в Linux, где я запускаю ccmake в подкаталоге моего исходного кода, как этот ccmake .., я запуск cmake в Windows из подкаталога моего источника.

Так что же делают cmake-gui и ccmake, чего не делает cmake, и где требуется ручное вмешательство?

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


person josch    schedule 07.08.2015    source источник
comment
Что такое точная командная строка (cmake ...), которая приводит к этому сообщению об ошибке?   -  person tamas.kenez    schedule 07.08.2015
comment
@tamas.kenez: оказывается, проблема заключалась в том, что мой исходный код cmake находился в верхней части буквы диска, а не в подкаталоге. Эта информация отсутствовала в моем первоначальном вопросе.   -  person josch    schedule 07.08.2015


Ответы (2)


Оказывается, это ошибка в cmake. Цитата Дэвид Коул:

Поместите исходный код в подкаталог. CMake просто не работает в корне буквы диска в Windows. CMakeLists.txt ДОЛЖЕН находиться по крайней мере в одном подкаталоге под буквенным путем корневого диска.

Есть также несколько открытых отчетов об ошибках по этой проблеме:

person josch    schedule 07.08.2015

Глядя на отчеты об ошибках, которые дал josch, не похоже, что CMake будет исправлен с этим в ближайшем будущем. Я столкнулся с этой проблемой при использовании cmake в проекте Android NDK.

Мое решение состояло в том, чтобы использовать соединение (я использую Windows 10), я не мог перемещать исходные папки в подкаталоги.

Для соединения используйте команду mklink (в cmd.exe):

cd z:\
mklink /J MyProjectJp z:\

в проводнике вы увидите папку z:\MyProjectJp с точно таким же видом, как z:\. Теперь, чтобы построить свой проект, введите z:\MyProjectJp.

person marcinj    schedule 06.10.2016