我不确定对于具有子模块和使用这些模块的可执行文件的大型 cmake 项目的最佳方法。
解决方案1:
foo/ # project root directory
- CMakeLists.txt
- build/
- executable/
-- CMakeLists.txt # call to add_executable
-- include/
-- src/
-- test/
- modules/
-- core/
--- CMakeLists.txt # call to add_library
--- include/
---- core/ # interface of core module
--- src/
--- test/
-- utils/
--- CMakeLists.txt # call to add_library
--- include/
---- utils # interface of utils module
--- src/
--- test/
为每个模块创建不同的目标允许在其他项目中轻松重用模块。
但是现在很难/很难将一个模块与一个允许包含的项目相关联,#include "foo/core/..."
甚至是整个项目接口,比如#include "foo/foo.hpp"
解决方案2:
foo/ # project root directory
- CMakeLists.txt
- build/
- executable/
-- CMakeLists.txt # call to add_executable
-- include/
-- src/
-- test/
- modules/
-- CMakeLists.txt # call to add_library
-- include/ # interface of the whole module
--- core/ # interface of core module
--- utils/ # interface of utils module
-- src/
--- core/
--- utils/
-- test/
使用这种方法,模块接口的问题得到了解决,但是某些模块的重用变成了挑剔的复制粘贴工作。
你更喜欢哪种结构?
您是否使用完全不同的结构来管理更大的项目?