Это происходит потому, что:
-DCMAKE_INSTALL_PREFIX=./
означает, что вы устанавливаете поверх самого каталога сборки, в результате чего для каждого имени файла в команде cmake:
file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE SHARED_LIBRARY FILES
"path/poco/instDir/lib/libPocoEncodingsd.so.60"
"path/poco/instDir/lib/libPocoEncodingsd.so"
)
исходный и целевой файлы совпадают.Cmake превентивно удаляет файл назначения, чтобы заменить его исходным файлом.Это означает, что он удалил файл source .Отсюда ваша ошибка.
Такое поведение может быть ошибкой в cmake.На первый взгляд, если он проверяет и обнаруживает, что целевой файл существует и имеет ту же временную метку, что и исходный файл, он должен учитывать целевой файл в актуальном состоянии и не пытаться заменить его.Но я не углубился в это.Установка поверх вашей директории сборки разумно классифицируется как Не делайте этого .
Обычно в Unix-подобных ОС локально собранные пакеты должны быть установлены в /usr/local
.Вот для чего /usr/local
.Cmake, как и другие инструменты развертывания исходного пакета, по умолчанию соблюдает это соглашение.Поэтому, если вы просто запустите:
cmake -DCMAKE_BUILD_TYPE=Debug ../
make
sudo make install # Or however you run `make install` as root.
, тогда библиотеки poco
будут установлены в /usr/local/lib
, а заголовки в /usr/local/include/Poco
./usr/local/lib
- это путь поиска библиотеки по умолчанию для компоновщика, а /usr/local/include
- это путь поиска заголовка по умолчанию для компилятора.
Если по какой-то причине вы не хотите устанавливать префикс по умолчанию, выберитенекоторые:
-DCMAKE_INSTALL_PREFIX=/not/in/the/build/dir
и вы избежите этой проблемы.