gpt4 book ai didi

makefile - 为什么 `make install` 正在删除 `make` 生成的库文件 *.so ?

转载 作者:行者123 更新时间:2023-12-02 19:10:54 25 4
gpt4 key购买 nike

我正在编译 C++ Poco 库。我愿意

cmake -DCMAKE_INSTALL_PREFIX=./ -DCMAKE_BUILD_TYPE=Debug ../
make
make install

make install 时出现错误

 "path/poco/instDir/lib/libPocoEncodingsd.so.60".
Call Stack (most recent call first):
cmake_install.cmake:50 (include)


Makefile:85: recipe for target 'install' failed
make: *** [install] Error

基本上,文件 libPocoEncodingsd.so.60 是使用 make 创建的,但随后 make install 将其删除。

这是为什么?

如果我不运行make install,则不会创建安装路径内的文件夹,并且所有*.h 文件都不会复制到那里。

最佳答案

发生这种情况是因为:

-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抢先删除目标文件将其替换为源文件。这意味着它已被删除文件。因此你的失败。

此行为可能是 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 和 header 中在 /usr/local/include/Poco 中。 /usr/local/lib 是默认的库搜索路径链接器和 /usr/local/include 是编译器的默认 header 搜索路径。

如果由于某种原因您不想安装到默认前缀,那么选择一些:

-DCMAKE_INSTALL_PREFIX=/not/in/the/build/dir

这样你就可以避免这个问题。

关于makefile - 为什么 `make install` 正在删除 `make` 生成的库文件 *.so ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52576869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com