【问题标题】:What exacly is "buidling" from source and how does it work从源头“构建”到底是什么以及它是如何工作的
【发布时间】:2014-04-30 18:24:11
【问题描述】:

所以我真的不明白这是如何工作的,但我解释得晚了。首先,以防万一,我在笔记本电脑上运行 Ubuntu 12.04 64 位。

作为构建工具,我使用 CMake。我想将 OpenCV、MRPT (http://www.mrpt.org/) 和 libfreenect 加载到我的项目中。它们都有一个“源代码”。我不明白的是当他们说“从源代码构建”时。我如何与所有这些人一起制作一个项目? 我是否需要以某种方式单独构建每个,然后在我的项目中,或者我是否需要下载源代码并将它们全部一起构建?如您所见,我真的很困惑我必须做什么......我是否从每个源代码运行 CMakeList.txt 并运行一个包含所有其他 CMakeList.txt 的 CMakeList.txt?

在更少的世界中,如果我想从源代码构建两个或更多库,我该怎么做?

我想要一个一般性的答案(这个“从源代码构建”如何工作)和一个专门针对我提到的那些(CMake、OpenCV、MRPT、libfreenect)的答案。我希望我把我不太明白的地方说清楚了。

【问题讨论】:

  • 当然,您需要对一般编程有一个更好、更广泛的想法。这肯定是题外话。

标签: opencv build cmake cmake-gui


【解决方案1】:

这取决于“主”项目。一般来说,在 c/c++ 世界中,您的项目必须知道如何调用每个子项目/库的构建过程,或者您的项目需要知道如何在自己构建每个外部项目后包含和链接结果。

如果需要,您也可以混合使用这两种方法,但我认为如果可能的话尝试使用其中一种会更干净。

在第一种情况下,如果所有子项目都提供 cmake 构建文件 (CMakeLists.txt),您可以尝试分别添加_subdirectory() 并查看是否有任何冲突。例如 google test 可以通过这种方式轻松包含在内,并为您的项目提供一些全局变量,以便以后轻松链接。

或者,如果上述方法出现问题或子项目不提供 CMakeLists.txt,您可以使用ExternalProject_add()。这需要更多的工作,您必须手动处理包含/链接配置与您的项目,但它使子项目更加独立。例如,如果您的项目存在冲突的目标或子项目未提供 CMakeLists.txt。

最后一种方法涉及单独构建和安装子项目,使用项目中的配置变量来指向子项目的包含/库路径。详情请查看CMake:How To Find Libraries

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    相关资源
    最近更新 更多