Редактирование и удаление CMakeCache.txt после перемещения каталога

Если CMake повторно выполняется после перемещения каталога источника, возникает такая ошибка:

Ошибка CMake: текущий каталог CMakeCache.txt/new-path/CMakeCache.txt отличается от каталога/старого пути, где был создан CMakeCache.txt. Это может привести к созданию двоичных файлов в неправильном месте. Если вы не уверены, верните CMakeCache.txt

Каков наилучший подход к решению этой проблемы? Кажется, что удаление кеша работает. Почему я могу отредактировать CMakeCache.txt, а не просто удалить его?

Ответ 1

Я думаю, что ваш лучший выбор - действительно удалить кеш и воссоздать его. Фактически, я склонен идти дальше и удалять все дерево построения, если мне нужно переместить источник, но это, вероятно, слишком велико.

Файл CMakeCache.txt можно редактировать с помощью графического интерфейса CMake или вручную, если вы уверены, что делаете, но я считаю, что это обычно не стоит усилий по сравнению с повторным запуском cmake с нуля. Я думаю, если запуск CMake занимает значительное количество времени (например, если вы используете ExternalProject_Add, который может включать загрузку и создание стороннего ресурса), может быть предпочтительнее изменить CMakeCache.txt.

В этой статье приводится более подробная информация о файле CMakeCache.txt и его редактировании. В частности, он говорит:

Основной причиной редактирования кеша было бы дать CMake расположение родной библиотеки, такой как JPEG, или остановить ее от использования родной библиотеки и использовать версию библиотеки в исходном дереве.

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

Ответ 2

Я столкнулся с такой же ошибкой при запуске кода CGAL (который я уже скомпилировал когда-то). Все, что я сделал, это создать новый каталог и скопировать туда файл ".cpp" и запустить "CGAL_create_CMakelists", а затем запустить команду cmake. Это сработало. Я точно не знаю, но я думаю, что ошибка возникает, когда вы запускаете код, который уже был скомпилирован, и имеет свои файлы сборки уже в папке (из-за предыдущей компиляции).