我想创建一个合理的库结构和CMake的文件中,这将允许其他CMake的项目可以轻松地包括该库。 我发现了很多类似的问题,但是,没有人似乎为解决我确切的问题 。
我现在的结构如下:
/*MyLibrary/
├── CMakeLists.txt (including lib subdirectories)
├── external/
│ └── googletest/
├── lib/
│ ├── common/
│ │ ├── CMakeList.txt (creates static lib common)
│ │ ├── include/common/*.h
│ │ └── src/*.cpp
│ ├── cipher/
│ │ ├── CMakeList.txt (creates static lib cipher)
│ │ ├── include/cipher/*.h
│ │ └── src/*.cpp
└── test/
├── main.cpp (code for executing google test)
├── CMakeLists.txt (creates unittest executable)
├── common/*Test.cpp
└── cipher/*Test.cpp
*/
现在我想创建一个类似的目录结构的一个项目,但是当我想在具有相同的名称作为静态库的一个项目,以创建一个静态库出现问题MyLibrary
( common
的例子)。
我想包括图书馆到使用项目的add_subdirectory(external/MyLibrary)
在项目CMakeLists,但失败,因为静态库的名称colide。
甚至当我解决这个问题,通过重命名库(我其实不认为这是一个很好的解决方案),我结束了googletest冲突,因为两者的图书馆和我的项目,都依赖于googletest。
有什么办法可以轻松地解决这个问题? 我想的是2个posibilities:
- 在
MyLibrary
我就从所谓的所有子库创建一个静态库libMyLibrary.a
并且仅包括图书馆(优先停留的选择,但我没有线索如何实现它的CMake) - 强制库的用户安装它,不包括图书馆作为一个项目子模块(最后一个选项我会去的)
有没有解决呢这将使我的图书馆与大多数CMake的项目兼容其他一些合理的方式? 如果没有,我怎么能实现上面提到的选项中至少有一个
简而言之:
我怎样才能创建一个图书馆的CMake文件,使图书馆很容易包含在其他CMake的项目?
我该如何处理多余的相关性,如googletest?