【问题标题】:How do you fix `cmake .. && make install` "No rule to make target install"?你如何修复`cmake .. && make install`“没有规则进行目标安装”?
【发布时间】:2018-10-07 10:42:12
【问题描述】:

我试图使用cmake 安装一些通过cmake 构建的库和可执行文件。

我找到了What is cmake equivalent of 'configure --prefix=DIR && make all install '?,这似乎很容易。看起来你只需要设置cmake 变量CMAKE_INSTALL_PREFIX 然后make install 应该可以工作。

我发现单独设置 cmake 变量并不能修复 make install 并且我不断收到错误消息“No rule to make target install”。

你如何解决cmake .. && make install“没有规则进行目标安装”?

附言cmake 版本为 2.8.x

【问题讨论】:

  • 您确定“安装”是该项目定义的有效目标吗?
  • @JesperJuhl 看我的answer

标签: c++ makefile cmake installation


【解决方案1】:

我查阅了我拥有的 Cmake 教科书(或者如果你去 [cmaketutorial0(https://cmake.org/cmake-tutorial/))。根据教科书,除了设置cmake变量CMAKE_INSTALL_PREFIX,你还需要通过生成的Makefile调用cmake函数install()来安装任何你想安装的东西。

所以在我的情况下,我通过以下方式在我的 CMakeLists.txt 中设置变量:

set(CMAKE_INSTALL_PREFIX path/to/directory)

然后在每个add_library()add_executable() 下我添加了:

install(TARGETS name1
    DESTINATION ${CMAKE_INSTALL_PREFIX}
    )

然后当我执行cmake .. && make && make install 时,我成功了,并且预期的文件已安装在预期的目的地。

【讨论】:

  • 这并不是一个真正的通用解决方案。可能对您的情况有效,但通常有不同的方法来设置 CMake 项目。自述文件或某种文档应该告诉你如何使用它,如果它不明显的话。
  • @super 我想这不是那么通用。随时编辑我的解决方案。我的解决方案的重点是您的cmake 项目中必须至少有一个install() 函数调用。所以我的解决方案尝试提供一个MCVE 来演示cmake 函数API 对install() 的使用。
  • 看看GNUInstallDirs内置模块也..然后定义config.cmake文件也...
  • 这个答案很有帮助。谢谢你,战士!对于一个无法激发学习 aha 时刻的 通用解决方案 而言,太过火热是纯粹的邪恶。我相信在某些领域争取通用解决方案,但考虑到软件构建系统是一个婴儿工程的背景,最好公开新构建所需的原语。
  • @eigenfield 感谢您理解我写这篇文章的原因(即做一些容易理解的事情)。客气的话语很好地平衡了对“您的解决方案不是通用的”的批评。我认为“争取通用解决方案”的想法是一个好主意......这是我在我的大部分代码中所做的(因为构建健壮的通用解决方案需要多 2-10 倍的行数,并且更难理解和 2-10 倍)开发时间可能要多 2 到 10 倍……更重要的是……大多数代码不需要强大的通用解决方案)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 2013-01-24
  • 2015-09-26
  • 2016-08-14
相关资源
最近更新 更多