如何在我自己的CMake项目中包含现有的CMake git repo作为子模块?

我正在尝试使用OpenKinect项目编写一些程序。 我想将OpenKinect的主分支作为子目录添加到我的项目源文件中。 但是,如果你看看OpenKinect自己的CMake,那里有太多的东西,我不需要一切。 那里有一些选项,被设置为ON或OFF,如下所示:

OPTION(BUILD_AUDIO "Build audio support" OFF) OPTION(BUILD_REDIST_PACKAGE "Build libfreenect in a legally-redistributable manner (only affects audio)" OFF) OPTION(BUILD_EXAMPLES "Build example programs" ON) OPTION(BUILD_FAKENECT "Build fakenect mock library" ON) OPTION(BUILD_C_SYNC "Build c synchronous library" ON) OPTION(BUILD_CPP "Build C++ Library (currently header only)" ON) OPTION(BUILD_CV "Build OpenCV wrapper" ON) OPTION(BUILD_AS3_SERVER "Build the Actionscript 3 Server Example" OFF) OPTION(BUILD_PYTHON "Build Python extension" ON) IF(PROJECT_OS_LINUX) OPTION(BUILD_CPACK "Build an RPM or DEB using CPack" ON) ENDIF(PROJECT_OS_LINUX) 

在不对OpenKinect文件做任何重大修改的情况下(这样我就可以随时调用),那么我怎样才能将一些部分(例如, C++ wrapperOpenCV bindings )导入到我自己的CMake项目中? 我想拷贝某些不依赖其他目录的目录,如果我完全重写了CMake文件的话。 我再也不能使用这个git了,但这将是一个快速的解决scheme。 但是我得到奇怪的错误,比如“stdexcept没有在这个范围内声明”,这是没有意义的,因为它是一个标准的gc ++库。

如果您只是想启用/禁用该库的某些部分,则可以在调用ADD_SUBDIRECTORY之前简单地设置适当的选项。

只需使用与库的CMakeLists.txt相同的OPTION命令,但是可以根据需要将它们设置为ON / OFF 。 当然,oyu可以随意更改/选择描述字符串,只要你喜欢。

或者(如果选项的值与true / false不同),则可以使用SET(.... CACHE ... )

例如

 SET(BUILD_CPP TRUE CACHE BOOL "Build C++ Library (currently header only)") 

类似的问题: 在CMake子项目中覆盖选项