我有两个项目,两个项目都使用CMake。现在我想将其中一个项目作为一个库包含在另一个项目中,同时仍然保持将它们编译为独立项目的能力。
到目前为止,我所做的是:使用版本控制系统在父项目的子目录中克隆子项目的副本。我已经使用“add_subdirectory”将子项目的CMakeLists.txt包含到父项目中。我通过重命名子项目中的一些目标来修复目标之间的名称冲突。
但是,我遇到的一个问题是子项目中的各种配置测试似乎没有运行。例如,子项目使用FindThreads模块来确定可用的同步基元。父项目不知道线程问题,因此没有任何与此相关的测试。类似地,子项目对标题进行了各种测试,父项目不需要这些测试。这些测试似乎都没有运行,并且这些测试定义的符号没有添加到CMakeCache.txt文件中。
我真的不想将所有子项目的测试(主要处理与父项无关的平台特定问题)提升到父项目的CMakeLists.txt中。
答案 0 :(得分:17)
CMake 2.8添加了一个新的External Project模块,它允许您创建一个自定义目标来驱动另一个CMake项目的构建。关于这方面的文档有点弱,但看起来它可能会做你想要的。
我认为这个想法是从你的父项目调用ExternalProject_Add,将它指向子项目的源目录(你甚至可以让它为你检查SVN或CVS中的子项目,很好!)。 / p>