【问题标题】:Enable cmake options/flag after making the file制作文件后启用 cmake 选项/标志
【发布时间】:2017-06-08 03:07:52
【问题描述】:

我对 cmake 了解不多。我按照他们 github 页面上的说明安装了一个包libfreenect2。说明如下-

克隆存储库。并按照 cmake 步骤:

cd ..
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2
make
make install

但是,安装后我意识到需要 libfreenect2 作为依赖项的程序/包需要我使用:

cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 -DENABLE_CXX11=ON

您可能已经注意到,it 要求我使用一个额外的标志 -DENABLE_CXX11=ON我该如何解决这个问题?整个制作过程完成后,如何设置 ENABLE_CXX11=ON? 顺便问一下 -D 是做什么的? (这些 -DXXX 是叫选项还是标志)

如果您的回答是再次重复整个过程,请指导我逐步完成删除正确文件的过程。我不想删除其他依赖项。

以下是与 cmake 相关的其他一些 stackoverflow 答案- set cmake option()cmake option to include a directoryWhat does cmake do

解决方案 - 我使用公认的解决方案来启用标志。即使它对我的问题(libfreenect2)有效,如果有人可以提供不涉及重新安装的答案,那将是惊人的。

【问题讨论】:

  • 我假设您不想从头开始一切。这很好,因为它应该可以用不同的参数重复你的最后三个步骤。根据我的经验,make 确实会检测到 makefile 何时更改并相应地进行重建。
  • 好吧!我总是可以重新开始,但这并不是那么有趣。如果我不能很快得到答案,我会的。我不需要删除在cmake过程中创建的主目录中的“freenect2”文件夹吗?我不需要删除在 cmake 过程中生成的任何其他文件吗?并且执行整个过程(cmake,make和make install)意味着新版本安装在以前的版本之上?
  • 我会说,不,您不必删除 CMake 生成的任何内容。这通常仅在您更改与编译器本身相关的内容时才需要。 ENABLE_CXX11 听起来像是一个特定于库的选项(您正在使用 -D 强制/覆盖)。
  • 好的!感谢那。但是,即使它是一个特定于库的选项,并且如果我再次进行整个过程并再次安装它,那么我不应该先卸载现有的包吗?这不是必须的吗?
  • 是的,事先致电make uninstall 会更干净。如果该构建目标不可用,请参阅here

标签: c++ c makefile installation cmake


【解决方案1】:

我的热情建议是使用该选项 ON 重复该过程。
首先,您应该删除之前生成的内容。
要遵循的命令序列如下:

rm -rf build
rm -rf $HOME/freenect2

只是为了完全确定您从“干净的状态”开始。
我认为不需要执行rm -rf $HOME/freenect2,因为文件/目录将被新安装覆盖,但不会受到伤害。
您也可以尝试其中一个 cmets 中提到的 SO 帖子中的建议。
然后从libfreenect2的根目录重复这个过程:

mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 -DENABLE_CXX11=ON
make
make install  

或者,如果您完全确定您将使用该选项ENABLE_CXX11=ON 构建libfreenect2 始终,您可以在@ 的CMakeLists.txt 中明确地将其设置为ON 987654329@,具体换行:

OPTION(ENABLE_CXX11 "Enable C++11 support" OFF)

进入

OPTION(ENABLE_CXX11 "Enable C++11 support" ON)  

在最后一种情况下,您只需要这样做

mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2
make
make install  

当然是在您按照开头所述进行清洁之后。


关于 CMake 的 -D,它允许您传递 选项。直接来自文档:

-D <var>:<type>=<value>

创建一个 cmake 缓存条目。

当 cmake 第一次在空的构建树中运行时,它会创建一个 CMakeCache.txt 文件并使用可自定义的设置填充它 该项目。此选项可用于指定采用 优先于项目的默认值。该选项可以重复 尽可能多的缓存条目。 因此,如果有一些项目默认选项想要更改/覆盖,则可以这样做。

【讨论】:

  • 我不太精通 bash。但是清理不应该不仅仅是删除一个文件夹吗?为了卸载程序,应该执行make uninstall 或类似的操作。没有?
  • 没有。你故意传递CMAKE_INSTALL_PREFIXlibfreenect2 将安装的所有内容都将放在您在CMAKE_INSTALL_PREFIX 中指定的目录中。查看源代码,这是一个库,而不是程序,没有make uninstall 目标,因此您无法为此包执行该命令,除非您在他们的CMakeLists.txt 中对其进行编码,并且看起来所有内容都安装在CMAKE_INSTALL_PREFIX指定的目录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 2014-07-12
  • 2017-12-05
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多