为什么要在 C 和 C++ 项目中创建 include/ 目录?

2024-06-30

当我处理我的个人 C 和 C++ 项目时,我通常把file.h and file.cpp在同一目录中,然后file.cpp可以参考file.h with a #include "file.h"指示。

然而,通常会发现库和其他类型的项目(如 linux 内核和 freeRTOS)都包含.h文件被放置在一个include/目录,同时.cpp文件保留在另一个目录中。在那些项目中,.h文件也包含在#include "file.h"代替#include "include/file.h"正如我所希望的那样。

我对这一切有一些疑问:

  1. 这种文件结构组织有什么优点呢?
  2. Why are .h里面的文件include/包含在#include "file.h"代替#include "include/file.h"?我知道真正的技巧在某些 Makefile 中,但是这样做真的比(在代码中)明确我们想要包含的文件实际上在include/目录?

这样做的主要原因是编译的库需要标头才能被最终用户使用。按照惯例,该文件的内容include目录是公开供公众使用的标头。源目录可能有供内部使用的标头,但这些是not旨在与编译的库一起分发。

因此,在使用该库时,您可以链接到二进制文件并添加该库的include目录到构建系统的头路径。同样,如果将编译的库安装到集中位置,您可以知道哪些文件需要复制到中心位置(编译的二进制文件和include目录)以及哪些文件没有(源目录等)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么要在 C 和 C++ 项目中创建 include/ 目录? 的相关文章

  • 生成一定范围内的 N 个随机数,其总和为常数

    我想生成从 a b 之间的特定分布 例如均匀随机 抽取的 N 个随机数 其总和为常数 C 我尝试了一些我自己能想到的解决方案 以及在类似线程上提出的一些解决方案 但是他们中的大多数要么适用于有限形式的问题 要么我无法证明结果仍然遵循所需的分
  • 嵌入式控制台日志优化

    不久前我曾发过一篇文章this https stackoverflow com questions 25204389 how to get unique values at preprocessing across files关于SO的问题
  • C# 泛型方法,new() 构造函数约束中的类型参数

    有没有办法创建一个使用的通用方法new 要求类具有特定类型的构造函数属性的约束 例如 我有以下代码 public T MyGenericMethod
  • ListView 内的 TextBox 绑定到对象,双向绑定不起作用

    Edit 好吧 在尝试了无数次但没有成功之后 我创建了一个非常小的 Wpf 应用程序 您可以直接复制此代码 请注意 当您更改文本框中的值并按 测试 按钮时 这些值永远不会更新 我不明白为什么双向绑定不起作用 请帮忙 这是 xaml
  • 选择数据结构

    根据需求使用不同的数据结构 但我如何知道应该使用哪种数据结构 我只是想知道如何选择合适的数据结构 谢谢 此流程图适用于 C 中的 STL 但您可以用 C 实现 STL 容器支持的任何数据结构 列表是一个链接列表 Vector是一个动态数组
  • C# 如何更改 windows.forms.listview 中的网格线颜色

    如何更改 windows forms listview 中的网格线颜色 我认为没有办法在不覆盖 Paint Event 的情况下在列表视图上执行此操作 但是 如果您能够切换到网格视图 您可以这样做 this dataGridView1 Gr
  • 为什么禁止在后续私有派生类中简单提及基指针/引用?

    struct B struct D private B B fun return new D ok struct DD public D B foo return 0 error struct B B B is inaccessible 这
  • 类内枚举前向声明是否可能? [复制]

    这个问题在这里已经有答案了 我知道在 C 11 中可以转发声明枚举类型 如果提供了存储类型 例如 enum E short void foo E e enum E short VALUE 1 VALUE 2 但我想转发声明一个类中定义的枚举
  • 在 OpenCV C++ 中使用 gpu::GpuMat

    我想知道如何修改gpu GpuMat 事实上我想知道是否可以使用gpu GpuMat like a cv Mat 我想做这样的事情 cv namedWindow Result cv Mat src host cv imread lena j
  • 在 C++ 中将注册表值设置为宽字符串 (WCHAR)

    我正在尝试在 C 中向注册表添加宽字符串 问题是RegSetValueEx 函数不支持宽字符 仅支持BYTE type BYTE unsigned char WCHAR myPath C exe RegSetValueExA HKEY CU
  • C++14 中专门用于数组类型的分配器?

    为什么 c 14 中没有 std allocator 的数组模板专门化 当我自己尝试专门化 std allocator 时 我在实现 Construction 和 destroy 方法时遇到了死胡同 是这个原因吗 那么为什么 std all
  • 使用迭代器与索引访问向量元素有什么区别?

    使用迭代器与索引访问向量元素有什么优点 为什么迭代器比索引更好 在索引不可用的情况下 例如 std list 对于 例子 在通用函数接受迭代器的情况下 叫做 编写应该使用的函数模板时 不止一种容器类型 他们的存在是为了创造均匀性在所有容器和
  • 如何从 C 函数中返回多个值?

    如果我有一个产生结果的函数int和一个结果string 如何从函数中返回它们 据我所知 我只能返回一件事 这是由函数名称前面的类型决定的 我不知道你的是什么string是的 但我假设它管理自己的内存 您有两种解决方案 1 返回一个struc
  • Asp.net MVC 2 缓存

    我目前正在使用 c 中的 asp net mvc 2 开发一个网站 我从未使用过 MVC 中的缓存功能 并且想将其应用到用户个人资料页面 此页面上的内容很少更改 唯一需要实时的部分是用户最近发布的帖子列表 我使用linq to sql从数据
  • C++ 流到内存

    我怎样才能创造std ostream and std istream对象指向我分配和管理的一块内存 我不希望流释放我的内存 我正在考虑使用rdbuf gt pubsetbuf 修改其他流之一 例如sstringstream 不过我认为str
  • 尝试写入事件日志时出错 - 无法打开源“SourceName”的日志。您可能没有写入权限

    目前 我们正在尝试将现有的经典 ASP 页面集成到记录事件日志的新方法中 我们通过调用公开为 COM 对象的 NET 程序集来实现此目的 该程序集实际记录到事件日志中 这一切都正常工作 但是当我们尝试写入事件日志时 我们收到错误 无法打开源
  • 如何确保 IsInRole 检查不使用缓存的凭据

    我有一个连接到 WCF 服务的 WPF 客户端 我想锁定某些功能 以便只有某些用户可以执行某些操作 WCF 服务在执行服务方法时模拟客户端用户 操作系统是Windows XP 我正在读书这个问题 https stackoverflow co
  • 反序列化 jQuery 序列化表单

    我正在尝试将表单输入传递到 WebMethod 中并执行某些操作 我用了jQuery 序列化 http api jquery com serialize
  • 使用本机 Win32 读取“C”中的文本文件(Unicode)

    我有一个使用 CreateFile 和 WriteFile 创建的面向行的文本文件 Unicode 使用 ReadFile 以二进制流形式读取该文件非常简单 但需要额外的低级处理才能将其分成几行 是否有 Win32 函数可以为我执行此操作
  • “auto_ptr”和 STL 容器:编写错误用法的示例

    读完本教程后提出这个问题 http www cprogramming com tutorial auto ptr html http www cprogramming com tutorial auto ptr html 在那里你可以找到以

随机推荐

  • 即使指定了标头,g++ 也找不到标头

    所以基本上我有一些非常简单的代码 其中包括
  • Java客户端找不到主节点:MasterNotDiscoveredException等待[1m]

    我正在使用 vagrant 并使用 debian 软件包在其上安装了 ES elasticsearch 1 1 1 deb 在我的网络应用程序中 我使用 jar org elasticsearch elasticsearch 1 1 1 我
  • 相比之下,超出了最大递归深度

    我写了这段代码来计算组合的数量 def fact n return 1 if n 1 else n fact n 1 def combinations n k return fact n fact n k fact k while True
  • WCF 数据契约和参考实体数据?

    征求有关 最佳 模式的反馈 选项 评论 以用于我的服务中的参考数据 参考数据是什么意思 让我们以北风为例 订单与数据库中的客户相关 当我实现订单服务时 在某些情况下 我希望从订单中引用 完整 客户 而在其他情况下 我只想引用客户 例如键 值
  • Twitter Bootstrap:按钮下拉列表中的图标

    Here http jsfiddle net DjHyQ 是 jsfiddle 上的链接 其中包含一些演示 它在 Chrome 甚至 IE 中运行良好 但在 FF 中图标会下降 我怎样才能解决这个问题而不用负边距或类似的东西来提升它们 我不
  • Asp.net Mvc自定义机制处理未授权请求

    对于我的网站 我希望安全控制器 或操作 具有以下行为 如果用户发出正常请求重定向到登录页面 我可以轻松做到 如果请求是Ajax类型Request IsAjaxRequest true 返回状态码401 我如何为此创建一个过滤器 public
  • 规划带有透明覆盖图像的科尔多瓦相机插件

    我正在编写和应用程序 需要在相机上显示透明图像 例如作为构图指南 该应用程序必须至少在 iOS 和 Android 上发布 到目前为止 我已经找到了一个具有功能 iOS 源的插件 okstate plugin camera overlay
  • 带 null 检查的 Groovy 字符串连接

    有一个更好的方法吗 笔记 part1 part2 and part3是在其他地方定义的字符串变量 它们可以为空 def list part1 part2 part3 list removeAll null def ans list join
  • main() 是用户定义函数吗? [复制]

    这个问题在这里已经有答案了 程序员does定义内部发生的事情main 毕竟 那么 它应该被视为用户定义的函数吗 C 标准没有用户定义函数的概念 相反 它有一个概念库函数 main 不是库函数 但是 该标准还对其签名提出了一些要求 并且不得重
  • Hibernate 过滤器仅在从数据库加载数据后应用吗?

    我在网上发现了一些相互矛盾的信息 有谁知道Hibernate过滤器是否影响生成的sql 或者只是过滤从数据库读取的数据 休眠过滤器影响 where 子句生成的 SQL The Hibernate 过滤器简介 http java dzone
  • 具有无关访问的哈希值

    我有一个非 Rails 项目 在其中从 YAML 文件加载一些设置 config YAML load File open LOG ROOT config database yml 我只能像这样访问这个哈希值config host confi
  • 使用 useStats.getTotalTimeInForeground() 获取设备中每个应用程序在前台花费的时间

    我想知道 Android 设备中运行的所有应用程序所花费的时间 我使用以下代码获取所有包名称 请指导我如何链接包和上述方法来获取应用程序花费的时间 这是代码 List
  • 创建一个从用户机密获取连接字符串的 DbContextFactory

    使用 DotNetCore 解决方案WebApi项目和一个单独的Data包含实体框架实现的项目 我们一直在升级库 因此我们使用所有最新的核心内容 In the Data项目 我们创建了一个ApplicationDbContextFactor
  • 在 nhibernate 中使用复合键的自反 n:m 关系

    I have a legacy database with 3 tables like this source bilder hochladen net http www bilder hochladen net files gch8 1
  • 将 person.city.name 添加到 TableView

    我有一个 TableView 和一些 POJO 并且想要将其中一个属性绑定到 TableView 然而 该属性也是一个 POJO 并且应该有一个属性显示在 TableView 中 这是我的代码
  • 使用 CSS flexbox 重叠两个居中元素

    我试图将两个元素绝对居中于页面中间 一个元素在另一个元素后面 目的是让页面完全响应 中间有一个圆圈 后面有一个脉冲效果 这是一个小提琴 http jsfiddle net Fy8vD 2003 以下的 html body height 10
  • 在 DAO 中反映继承关系最有效的方法是什么?

    使用 MVC 结构和业务对象 http en wikipedia org wiki Business object DAO http en wikipedia org wiki Data access object建筑学 对于任何正常的业务
  • 在 git clean -d -f 之后恢复丢失的未版本化文件

    我感觉这个问题的答案是否定的 但我想我还是会问 长话短说 我不小心做了一个git clean d f在一个分支上丢失了大约 20 个我需要的文件 这些文件尚未提交 据我所知 git 不应该知道它们 有什么办法可以找回这些文件吗 不幸的是 您
  • PHP 会话混乱

    好吧 我已经很困惑了 我有一个存储在会话中的对象 我可以向该对象添加项目 到目前为止非常简单 我像这样初始化对象 template new Template mysqli SESSION template serialize templat
  • 为什么要在 C 和 C++ 项目中创建 include/ 目录?

    当我处理我的个人 C 和 C 项目时 我通常把file h and file cpp在同一目录中 然后file cpp可以参考file h with a include file h 指示 然而 通常会发现库和其他类型的项目 如 linux