Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建文件后启用cmake选项/标志_C++_C_Makefile_Installation_Cmake - Fatal编程技术网

C++ 创建文件后启用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

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

克隆存储库。并遵循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
您可能已经注意到,要求我使用一个额外的标志-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>