0

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

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

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

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

4

1 回答 1

0

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

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

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

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

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

于 2014-03-24T12:34:08.740 回答