我最近加入了一个使用cmake并且有很多魔法的项目。我有一些为小型项目设置cmake的经验,但这对我来说似乎很乱。
该项目包括几个应用程序和库,它们共享一个主库(由我们开发)和几个小库(部分是外部的,部分是我们自己的),其中一些共享依赖,一些不共享。由于非常具体的分发模型,最重要的要求之一是每个应用程序和库都可以独立编译。换句话说,我应该能够进入每个目录并使用mkdir build&& cd build&& cmake ..&&使。显然,我也应该能够在父目录中完成它。目前,它以下列方式完成:
文件结构或多或少如下:
root/
app1/
app1-1/
include/
src/
CMakeLists.txt
app1-2/
include/
src/
CMakeLists.txt
app1-3/
include/
src/
CMakeLists.txt
CMakeLists.txt
app2/
include/
src/
CMakeLists.txt
cmake
FindLib1Internal.cmake
FindLib2Internal.cmake
FindLib3External.cmake
InstallLib1Internal.cmake
InstallLib2Internal.cmake
InstallLib3External.cmake
shared/
lib1_internal/
include/
src/
CMakeLists.txt
lib2_internal/
include/
src/
CMakeLists.txt
lib3_external/
include/
src/
CMakeLists.txt
CMakeLists.txt
我用这种方法看到了很多问题。
理想情况下,我想摆脱脚本并仅依赖于CMakeLists及其依赖性。但是,我无法进行小的更改并测试它们,因为每当我修改任何内容时,cmake都会因各种错误而失败。感觉就像我玩Jenga一样,大部分的塔已经消失了......
如果有人可以推荐任何全局变化以简化cmake结构,那将是很棒的。我觉得很难相信,但也许目前的组织和方法是正确的?