【发布时间】:2011-10-18 19:10:52
【问题描述】:
我有一个 C++ 项目,在该项目中,我更多地将目录用作一种组织元素——就像在 Java 中使用包或在 PHP 中使用目录的方式一样。目录并非旨在成为自给自足的元素,而只是一种组织整个项目并防止我被来源淹没的方式。如何构建我的 CMakeLists.txt 文件来处理这个问题?制作目录库似乎不适合这里,因为它们都是相互依赖的,不打算以这种方式使用。
作为一个相关问题,我在 CMake 中看到的大多数关于多个子目录的示例(这些示例并不多)都忽略或掩盖了设置 include_directories 的问题,这是我的问题一直有麻烦。没有梳理我的源文件以确定哪个文件取决于哪个目录和哪个目录,是否有只是将/src/ 下的所有目录设置为潜在的包含目录并让 CMake 确定哪些是实际依赖的?
这是一个示例结构:
--src
--top1
--mid1
--bot1
--src1.cpp
--hdr1.h
--bot2
--src2.cpp
--hdr2.h
--mid2
--bot3
--src3.cpp
--src4.cpp
--hdr3.h
--top2
--mid3
--src5.cpp
--hdr4.h
如此等等。如何构建我的 CMakeLists.txt 文件来处理这种结构?
【问题讨论】:
-
你一定要使用 CMake 吗?
-
1.) 您是否使用首选的生成器? 2.) 你真的认为 CMake 应该弄清楚什么依赖什么?我认为应该可以定义相互独立的模块(例如 mid1、mid2、top2)。 3.) 你是否包括#include "hdr2.h" 或类似
的东西? -
@benoit 我想不是,但这就是我目前正在使用的。我宁愿不使用 Automake,当我的构建没有那么复杂时,似乎需要付出很多努力来学习构建系统。
-
@Philipp 1) 那不是 Cmake 吗? 2)我可以将目录定义为相互独立的模块。但这将超越使用组织的意义,而不是模块化的目录结构。在我的项目中,几乎所有东西都是相互依赖的,模块会比我想要的大得多。 3)我包括“hdr2.h”
-
如果您的文件夹不构成相对隔离的库,那么您的组织方法只是一种错觉 - 复杂的依赖关系可能仍会蔓延。我建议将模板和非模板代码分开。如果可能,请尝试在 .cpp 上实现模板并实例化您需要的模板,仅此而已