前言
用CMake管理自己的程序(一)
用CMake管理自己的程序(二)
之前的文章中,我们简单的介绍了一下一个正常的可执行程序以及一个正常的库要如何生成与管理,以及介绍了在一个正常的程序中要如何处理第三方库的引用问题,以及通过编译器的标志解决了一个中文乱码问题,接下来,我们就要遇到了一个最为关键的问题了:我们到底要如何管理自己的程序。
管理工程树
大部分的现代C++程序员,都是使用IDE进行软件开发的。
在IDE中,源代码都是由一个叫做“工程文件”的文件(或者叫其他的名字,但是其核心概念都是一致的),通过“树形”结构管理的。
当代的IDE大部分已经支持了将CMake当作“工程文件”并提供树形结构管理的功能了。例如,QtCreator就是如此:
我们可以看到之前文章中的两个程序,一个可执行程序test以及一个库add。
然而,经常使用IDE的用户应该已经发现了一个问题:这两个项目,事实上,是互相独立的。
我们甚至没有办法同时编译这两个工程,并且让add在test之前编译(因为test依赖add)。
当然,cmake已经考虑到了这个问题,事实上,cmake有一个专门的命令,用于处理这种“需要将多个程序放在一起管理的,并且程序之间存在互相依赖”的需求,那就是add_subdirectory命令。
如图所示:我们只需在已存在两个程序的基础上,在其源代码上一层的目录中添加一个新的CMakeLists.txt,然后键入以下内容,就可以实现同时管理多个程序的目的了(当然,此时我们就需要用这个上一层的总CMakeLists.txt所在目录作为工程的主目录了):