Я пытаюсь загрузить cmake 3.11.3 на Ubuntu 16.04.4 LTS xenial.
Я обновил свой компилятор gnu g ++ следующим образом:
> $ g++ --version
g++ (Ubuntu 8.1.0-5ubuntu1~16.04) 8.1.0 Copyright (C) 2018 Free
Software Foundation, Inc. This is free software; see the source for
copying conditions. There is NO warranty; not even for MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.
И вручную перенаправили символические ссылки:
$ ll /usr/bin/*g++*
lrwxrwxrwx 1 root root 5 Jun 8 16:57 /usr/bin/g++ -> g++-8*
-rwxr-xr-x 1 root root 919832 Apr 24 15:02 /usr/bin/g++-5*
lrwxrwxrwx 1 root root 22 Jun 6 04:26 /usr/bin/g++-8 -> x86_64-linux-gnu-g++-8*
lrwxrwxrwx 1 root root 22 Jun 8 16:58 /usr/bin/x86_64-linux-gnu-g++ -> x86_64-linux-gnu-g++-8*
lrwxrwxrwx 1 root root 5 Apr 24 15:02 /usr/bin/x86_64-linux-gnu-g++-5 -> g++-5*
-rwxr-xr-x 1 root root 1071984 Jun 6 04:26 /usr/bin/x86_64-linux-gnu-g++-8*
Однако я получаю следующую ошибку в конфигурации cmake:
$ sudo ./bootstrap
---------------------------------------------
CMake 3.11.3, Copyright 2000-2018 Kitware, Inc. and Contributors
Found GNU toolchain
C compiler on this system is: gcc
C++ compiler on this system is: g++
Makefile processor on this system is: make
g++ has setenv
g++ has unsetenv
g++ does not have environ in stdlib.h
g++ has stl wstring
g++ has <ext/stdio_filebuf.h>
---------------------------------------------
make: Warning: File 'Makefile' has modification time 2.3 s in the future
make: 'cmake' is up to date.
make: warning: Clock skew detected. Your build may be incomplete.
loading initial cache file /mnt/ganymede/user/gpeytavi/srv_admin/software/cmake-3.11.3/Bootstrap.cmk/InitialCacheFlags.cmake
CMake Error at CMakeLists.txt:92 (message):
The C++ compiler does not support C++11 (e.g. std::unique_ptr).
-- Configuring incomplete, errors occurred!
See also "/mnt/ganymede/user/gpeytavi/srv_admin/software/cmake-3.11.3/CMakeFiles/CMakeOutput.log".
See also "/mnt/ganymede/user/gpeytavi/srv_admin/software/cmake-3.11.3/CMakeFiles/CMakeError.log".
---------------------------------------------
Error when bootstrapping CMake:
Problem while running initial CMake
---------------------------------------------
Есть идеи, почему я получаю ошибку несовместимости с C++ 11 std::unique_ptr?





На самом деле сценарий ./bootstrap действительно пытается использовать различные стандартные флаги C++ с компилятором. Таким образом, он должен автоматически определять свои возможности.
Убедитесь, что у вас не задана никакая переменная среды CXXFLAGS, и попробуйте снова с нуля (сообщения / предупреждения, которые вы получаете, указывают на несколько попыток / ошибок в одном каталоге).
Вывод при успехе
В качестве ссылки на мой Ubuntu вызов CMake ./bootstrap выглядит так:
---------------------------------------------
CMake 3.11.20180423, Copyright 2000-2018 Kitware, Inc. and Contributors
Warning: This is an in-source build
Found GNU toolchain
C compiler on this system is: gcc
C++ compiler on this system is: g++ -std=gnu++1y
Makefile processor on this system is: make
g++ has setenv
g++ has unsetenv
g++ does not have environ in stdlib.h
g++ has stl wstring
g++ has <ext/stdio_filebuf.h>
---------------------------------------------
Отладка
Для отладки вашей проблемы вы также можете:
./bootstrap --verboseBootstrap.cmk/cmake_bootstrap.logИзвестная проблема
У меня только однажды была проблема с bootstrap с использованием компиляторов clang, где мне нужно было сделать следующий вызов:
export CXXFLAGS=-Xclang -std=c++1z -Xclang -stdlib=libc++
Альтернатива
Если вы просто хотите установить последнюю версию, см. Как указать, где установлен CMake в Ubuntu?
Большое спасибо, опция --verbose дала мне подсказку. У меня были файлы Cmake на смонтированном диске, и я пытался выполнить загрузку оттуда. Очевидно (по непонятным мне причинам) это невозможно.
В случае, если кто-то еще попадает в это, причина в смещении часов. Если временные метки на сетевом диске не совпадают с локальными файлами, cmake очень запутается, и тесты начнут давать сбой. Создайте локальный каталог, и ошибка исчезнет.
Да, для меня это тоже был перекос часов. Я использовал кластерный компьютер, у которого не было прямого соединения www, но вместо этого мне приходилось получать все данные с центрального сервера; и по какой-то причине часы пошли не так. Это была досадная ошибка.
В моем случае проблема связана с тем, что папка, в которой у меня есть исходный код CMake, находится в смонтированном каталоге (на самом деле все мои rootfs смонтированы через NFS) Итак, я просмотрел вывод команды «mount» и выбрал местоположение «/ run / user / 1000» в качестве локального, поскольку оно монтируется с помощью tmpfs, и переместил исходный код CMake в это место. с этим ./bootstrap && make && sudo make install выполнено успешно.
Это сработало! Я понятия не имел, что пытался собрать cmake в смонтированном каталоге, но после того, как я проделал то же самое в ~ /, он просто сработал! Спасибо.
Это сработало и для меня!
Не могли бы вы подробнее рассказать, в чем проблема? Я пытаюсь создать что-то, для чего у меня достаточно места только на монтировании NFS, поэтому переместить его в другое место на самом деле не вариант.
Я смог решить проблему, убедившись, что и машина сборки, и файловый сервер NFS были синхронизированы, запустив ntpd на обоих.
Упоминание unique_ptr, вероятно, просто отвлекающий маневр. В вашем файле make необходимо указать
-std=c++11, чтобы включить синтаксис C++ 11. Если ваш компилятор или make слишком стары, чтобы распознать это,-std=gnu++11может работать.