所以我真的不明白这项工作是怎么回事,但是我很晚才解释。首先,万一你需要它,我在笔记本电脑上运行64位Ubuntu 12.04。
作为使用CMake的构建工具。我想加载到我的项目OpenCV,MRPT(http://www.mrpt.org/)和libfreenect。所有这些都有一个"源代码"。我不明白的是,当他们说'#34;来源"。如何与所有人一起制作项目? 我是否需要单独构建每个元素并以某种方式然后在我的项目中构建或者我是否下载源代码并将它们一起构建在一起?正如你所看到的,我真的很困惑我要做的事情......我是否从每个源代码运行CMakeList.txt并运行一个包含所有其他CMakeList.txt的CMakeList.txt?
在更少的世界中,如果我想从源代码,两个或更多库构建,我该怎么做?
我想要一个通用的答案(这个"来源和#34;是如何工作的)和特别是我提到的答案(CMake,OpenCV,MRPT,libfreenect)。我希望我明确表达了我真正理解的内容。
答案 0 :(得分:0)
这取决于'主人'项目。通常在c / c ++ Universe中,您的项目必须知道如何调用每个子项目/库的构建过程,或者您的项目需要知道如何在自己构建每个外部项目后包含和链接结果。
如果需要,您也可以混合使用这两种方法,但我认为如果可能的话,尝试使用一种方法会更清晰。
在第一种情况下,如果所有子项目都提供了cmake构建文件(CMakeLists.txt),您可以尝试每个add_subdirectory()并查看是否存在任何冲突。例如,谷歌测试可以很容易地以这种方式包含,它为您的项目提供了一些全局变量,以便以后轻松链接。
或者,如果上述方法出现问题或子项目没有提供CMakeLists.txt,您可以使用ExternalProject_add()。这需要更多的工作,您必须手动处理包含/链接配置项目,但它使子项目更加独立。例如,如果您的项目存在冲突目标,或者子项目没有提供CMakeLists.txt。
最后一种方法涉及单独构建和安装子项目,使用项目中的配置变量指向子项目的包含/库路径。查看CMake:How To Find Libraries了解详情。