【问题标题】:How to include existing CMake git repo as submodule in my own CMake project?如何将现有的 CMake git repo 作为子模块包含在我自己的 CMake 项目中?
【发布时间】:2013-01-13 21:12:44
【问题描述】:

我正在尝试使用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 文件进行任何重大更改的情况下(以便我可以在需要时随时 git pull),如何仅将某些部分(例如,C++ wrapperOpenCV bindings)导入我自己的CMake 项目?如果我完全重写 CMake 文件,我想复制某些不依赖于其他目录的目录。我将无法再使用 git,但这将是一个快速修复。但是这样我得到了奇怪的错误,例如“stdexcept 没有在这个范围内声明”,这是没有意义的,因为它是一个标准的 gc++ 库。

【问题讨论】:

  • 为什么不“分叉” OpenKinect 并将您的更改保存在单独的分支中。这样,您可以继续从 git-OpenKinect 中“拉取”更新,同时将您的“修改”保留在单独的分支上。然后你就可以按照 Johannes S 的建议去做。

标签: c++ linux build cmake openkinect


【解决方案1】:

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

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

或者(如果选项的值不同于真/假),您可以使用SET(.... CACHE ... )

例如

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

类似的问题: Override option in CMake subproject

【讨论】:

  • 但这意味着更改OpenKinect的CMakeLists.txt,这是不希望的......
  • 不,一点也不。只需将它们设置在 your CMakeLists.txt 中,然后再调用 ADD_SUBDIRECTORY(....) 以包含 OpenKinect。所有设置/变量都由子项目继承。
  • 它对你有用吗?如果是的话,如果您能接受答案,那就太好了。如果没有,请告诉我们缺少什么。
  • 我不知何故错过了它。最诚挚的歉意:(
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 2023-03-17
  • 2021-11-22
  • 1970-01-01
  • 2020-07-08
  • 2017-11-21
相关资源
最近更新 更多