C++ 创建文件后启用cmake选项/标志
我对cmake不太了解。我按照github页面上的说明安装了一个包。说明如下- 克隆存储库。并遵循cmake步骤:C++ 创建文件后启用cmake选项/标志,c++,c,makefile,installation,cmake,C++,C,Makefile,Installation,Cmake,我对cmake不太了解。我按照github页面上的说明安装了一个包。说明如下- 克隆存储库。并遵循cmake步骤: cd .. mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 make make install 然而,安装后,我意识到需要libfreenect2作为依赖项的程序/包要求我使用: cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenec
cd ..
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2
make
make install
然而,安装后,我意识到需要libfreenect2作为依赖项的程序/包要求我使用:
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 -DENABLE_CXX11=ON
您可能已经注意到,要求我使用一个额外的标志-DENABLE_CXX11=ON如何修复此问题?在整个生成过程完成后,如何将ENABLE_CXX11=ON设置为ON?顺便问一下-D的作用是什么?(这些-DXXX东西称为选项或标志)
如果您的答案是再次重复整个过程,请指导我逐步删除正确的文件。我不想删除其他依赖项
以下是与cmake相关的一些其他答案-
,
解决方案-我使用接受的解决方案来启用标志。尽管它解决了我的问题(libfreenect2),但如果有人能提供一个不涉及重新安装的答案,那将是令人惊讶的 我的热情建议是在上使用该选项重复该过程
首先,您应该删除以前生成的内容。
要遵循的命令顺序如下:
rm -rf build
rm -rf $HOME/freenect2
只是为了确保你从一个“干净的状态”开始。
我不认为有必要执行rm-rf$HOME/freenect2
,因为新安装将覆盖文件/dir,但不会造成伤害。
您也可以在其中一条评论中提到的SO帖子中尝试该建议。
然后从libfreenect2的根目录重复该过程:
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 -DENABLE_CXX11=ON
make
make install
或者,如果您完全确定将始终使用该选项构建libfreenect2
,则可以在libfreenect2
的CMakeLists.txt
中明确地将其设置为一次开启,具体更改行:
OPTION(ENABLE_CXX11 "Enable C++11 support" OFF)
进入
在最后一种情况下,您只需要
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2
make
make install
当然,在你按照开始所解释的清洁之后
关于-D
对于CMake,它允许您传递选项。直接从文档中获取:
-D:=
创建cmake缓存项
当cmake第一次在空生成树中运行时,它会创建一个
CMakeCache.txt文件,并使用可自定义的
这个项目。此选项可用于指定需要的设置
优先级高于项目的默认值。该选项可以重复
根据需要获取尽可能多的缓存项。
因此,如果有一些项目默认选项需要更改/覆盖,则可以使用此选项
我想你不想从头开始。这很好,因为只要用不同的参数重复最后三个步骤就可以了。根据我的经验,make
确实检测到makefile何时被更改,并相应地进行重建。好吧!我总是可以重新开始,但那并不有趣。如果我不能很快得到答复,我会的。我不需要删除在cmake过程中创建的主目录中的“freenect2”文件夹吗?我不需要删除在cmake过程中生成的任何其他文件吗?执行整个过程(cmake、make和make-install)意味着新版本的安装要比上一个版本的安装多?我会说,不,你不必删除cmake生成的任何内容。通常,只有在更改与编译器本身相关的内容时,才需要这样做ENABLE_CXX11
听起来像是一个特定于库的选项(您正在使用-D
强制/覆盖该选项)。好的!谢谢你。但是,即使这是一个特定于库的选项,并且如果我再次进行整个过程并再次安装它,那么我是否应该首先卸载现有的包?这不是必需的吗?是的,调用makeuninstall
prior会更干净。如果构建目标不可用,请参见。我对bash不是很精通。但清理不应该比删除文件夹更重要吗?要卸载程序,应执行类似于makeuninstall
或类似操作。否?否。您故意传递CMAKE\u INSTALL\u前缀。将由libfreenect2
安装的所有内容都将放在您在CMAKE\u INSTALL\u PREFIX
中指定的目录中。查看源代码,这是一个库,而不是一个程序,没有makeuninstall
目标,因此您无法对此包执行该命令,除非您在CMakeLists.txt
中对其进行编码,并且看起来所有内容都安装在CMAKE\u INSTALL\u PREFIX
指定的目录中。
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2
make
make install
-D <var>:<type>=<value>