CMake和C源层次结构
在我的大多数项目中,我习惯于以下结构:CMake和C源层次结构,c,cmake,directory-structure,C,Cmake,Directory Structure,在我的大多数项目中,我习惯于以下结构: src/ inc/ ext/ build/ [...] CMakeLists.txt README LICENCE 其中,src是我的源代码所在的目录,inc是标题,ext是放置外部库的地方(然后由CMake构建) 这个结构看起来不太好,因为我面临以下问题: 我正在写图书馆 在我的inc目录中,所有的我的头都是,私有的和公共的头 在我的CMakeLists.txt中,我使用了如下内容: target_include_directories(${PROJ
src/
inc/
ext/
build/
[...]
CMakeLists.txt
README
LICENCE
其中,src
是我的源代码所在的目录,inc
是标题,ext
是放置外部库的地方(然后由CMake构建)
这个结构看起来不太好,因为我面临以下问题:
inc
目录中,所有的我的头都是,私有的和公共的头CMakeLists.txt中,我使用了如下内容:
target_include_directories(${PROJECT_NAME}
PUBLIC
inc
)
inc
内有一个private
和public
文件夹,因此:
src/
inc/
private/
public/
ext/
build/
[...]
CMakeLists.txt
README
LICENCE
然后我可以使用:
target_include_directories(${PROJECT_NAME}
PUBLIC
inc/public
PRIVATE
inc/private
)
问题是,是否有人能想到任何严肃的权衡?也许CMake甚至有一个“建议的层次结构”?老实说,我不是CMake的粉丝。我使用GNU make,它与我的操作系统捆绑在一起,我很高兴,我的代码对协作者的要求更少 但撇开CMake不谈,我会重新参观这个建筑 您的文件夹结构虽然并不少见,但与库或其组件无关。它不会为未来的维护人员提供任何可用信息 考虑以下源代码结构:
src
src/io
src/http
src/pubsub
src/database
突然,没有阅读一行代码,我就有了一个关于应用程序(或库)可能是什么以及在哪里可以找到我可能需要查看的每个组件的强烈提示
看看这个例子
在库中,这通常更重要,因为(希望)许多人会阅读代码并做出贡献
因此,您可能会问,include文件夹放在哪里?
将头文件与源文件分离的问题是,这会使维护更加困难
我建议使用脚本或使用make
动态创建usr/include
(用于安装的公共include文件)。。。但是由于您使用CGUD,请考虑指定每个公共标头,或者:
另一个常见的选项是,假定公共头与实现头明显分开(即,包含API限制,除非在主要修订期间,否则不进行编辑),将它们放在一个单独的
include
文件夹中。将私有头存储在src
中,并使用#include“…”
用于包含它们。在inc
中存储仅限公共的标题,并使用#include<…>代码>用于包含它们。@KamilCuk肯定是一个有效的解决方案,然后我将在目标目录(…)
中添加src/
作为私有即使没有必要。我将删除此问题,因为没有人对其进行投票-因此我不允许再问任何问题。。。如果有人反对删除,请告诉我。