如何防止引用的包含搜索当前源文件的目录?

2024-01-27

海湾合作委员会提供-I-选项,其中-I之前的目录-I-搜索引用的包含(#include "foo.h"), and -I以下目录-I-搜索括号内的包含(#include <foo.h>),以及其他引用的内容之后。

-I-还有一个非常重要的作用。它删除了源文件的目录#include位于默认搜索路径中。通常,引用的包含总是搜索源文件的目录,并搜索它before any -I或其他目录。-I-因此,您可以通过删除默认路径(否则会优先考虑)来按照您想要的顺序准确指定引用的包含文件的位置。

听起来我回答了我的问题,是吗?不,当我使用时-I-现在,我得到了这个令人讨厌的图:

cc1: note: obsolete option -I- used, please use -iquote instead

问题是-iquote does not从搜索路径中删除当前目录。无论我提供什么,它仍然总是首先被搜索-iquote.

所以问题是:如何获得与-I-,不使用-I-,它已被弃用并最终会消失?

详细说明:

假设文件布局如下:

srcdir/
    configure
    file1.c
    file2.c
    config.h

builddir/
    Makefile
    file1.o
    file2.o
    config.h
    libpudding.a

由于种种原因,我们无法删除config.h from srcdir(它将影响其他平台上的构建过程)。但是,我们希望包括config.h from builddir优先于zconf.h in srcdir.

这可以通过 GCC 来完成-I-旗,但否则似乎不可能。

更新的问题:

好吧,看来 GNU CC 开发人员已弃用-I-,但没有提供替代方法来实现其功能。所以我更新的问题是:引起开发人员注意的最有效方法是什么,这样很有可能-I-未弃用(我认为这是最可取的,因为它是一种非常优雅的方式来处理指定搜索,比 -iquotexxx 更优雅且不那么丑陋),或者提供某种方式从引用的包含中删除当前目录搜索路径?


与烦恼一起工作zconf.h在树外构建中,我肯定会回到您的观点,即当问题非常棘手时,它通常是错误的问题。你是绝对正确的。正确的问题是为什么zconf.h存在于srcdir无论如何,当它应该生成时zconf.h.in。对于给定的一组配置设置,应该始终生成文件或从不生成文件。它不应该在同一个构建中同时提供和生成。

这里最好的解决方案是删除zconf.h从源树并始终生成它zconf.h.in就像您在 CMake 构建中所做的那样。我一直不清楚为什么它对 CMake 是一种方式,而对 Make 是另一种方式。如果问题是你没有 autoconf,那么你将使用预先构建的zconf.h对于 make,但 CMake 为 CMake 生成了一个,然后将其作为zconf.h.in(你这样做),并将其复制到 Makefile 的构建树中。

摆脱奇怪的行为-I-这是一个很好的举动。在搜索路径中存在多个使用相同名称引用的文件是非常混乱和丑陋的。如果-I搜索顺序很重要,那么您的项目或构建中的某些内容设计不正确。我永远不必猜测什么#include "foo.h"指。我绝对不应该处于很容易发现自己编辑错误文件的情况。

我对您改进 zlib 构建的工作表示赞赏。 zlib 当然不是最难构建的包,但它也肯定不是最简单的(特别是如果您需要 contrib/minizip 东西,而我总是这样做)。

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

如何防止引用的包含搜索当前源文件的目录? 的相关文章

  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • 为什么不能使用同一个 Span 对象来 setSpan 两次?

    为什么不能使用同一个 Span 对象来 setSpan 两次 SpannableString ss new SpannableString aaaaa 1 bbbb 1 cccc 1 我需要用图像替换所有 1 如果我使用以下代码 则只有最后
  • 使用 Airflow 执行频繁任务

    我们使用 Airflow 一段时间了 它非常棒 现在我们正在考虑将一些非常频繁的任务也转移到我们的气流服务器中 假设我每秒运行一个脚本 使用气流安排它的最佳实践是什么 在每秒计划的 DAG 中运行此脚本 我非常怀疑这是否是解决方案 DAGR
  • 更新页面以使用 Greasemonkey 添加新链接

    大多数时候 JScript 都让我头疼 但设计糟糕的网站更让我头疼 Foursquare 的超级用户就是这样的一个例子 期望的结果 一个 Greasemonkey 脚本 它将检查 DIV 类的每次出现搜索结果 以及 DIV 类之后name附
  • WindowsFormsHost 中的 ILScene

    我正在尝试在 WPF 中的 WindowsFormsHost 控件中托管 ILPanel 这是我的代码 XAML
  • 哪些手机支持哪种 J2ME(Java 微型版)规范?

    我只是找不到关于哪些移动设备支持哪些 Java 的最新图表 微版版本 我特别感兴趣诺基亚智能手机以及他们对新事物的支持JME 3 0 我想知道Sun似乎没有提供此类信息 如果您知道的话 请给我一些链接 EDIT 我可能把事情搞混了 MIDP
  • 返回带有字段名称而不是别名的 pydantic 模型作为 fastapi 响应

    我试图用定义的字段名称而不是别名返回我的模型 class FooModel BaseModel foo str Field alias bar app get gt FooModel return FooModel bar baz 响应将是
  • jsTree 拖放按类限制文件夹

    如何通过类名 class locked 锁定文件夹上的拖动功能 同时锁定其他要拖到该文件夹 中的文件夹class locked 我想要一个既具有拖放功能又具有上下文菜单的设置 如果节点的类名 锁定 我只想禁用上下文菜单的编辑以及拖入此文件夹
  • 使用 python 有效提取 1-5 克

    我有一个 3 000 000 行的巨大文件 每行有 20 40 个单词 我必须从语料库中提取 1 到 5 个 ngram 我的输入文件是标记化的纯文本 例如 This is a foo bar sentence There is a com
  • 用于从 Google Sheets URL 中提取电子表格 ID 和工作表 ID 的 JavaScript 正则表达式

    我想要 Javascript 正则表达式从 google 表格 URL 中提取电子表格 ID 和工作表 ID Sheets google com 电子表格的 URL 如下所示 https docs google com spreadshee
  • 删除 d3js 不工作的事件侦听器

    我有一个 SVG 结构 里面有一些形状 我想在单击形状时触发一个事件 在 SVG 上单击时触发另一个事件 问题是 SVG 事件总是被触发 为了防止这种情况 我禁用了形状的事件冒泡 我还尝试使用 d3 禁用该事件 但似乎不起作用 还尝试使用本
  • 朱莉娅 git 错误

    几个月前我在使用 Julia 最近我想再次使用它 我想要一个新版本 所以我删除了以前的版本和我拥有的所有软件包 现在 安装新版本后 0 6 2 我无法使用任何 Pkg 命令 使用后会出现以下错误init add or update 错误 G
  • 通过 pod 访问 kubernetes python api

    所以我需要通过 pod 连接到 python kubernetes 客户端 我一直在尝试使用config load incluster config 基本上遵循以下示例here https github com kubernetes cli
  • Spearman 与底座 R 的尺距距离

    给定两个排列 v1 1 4 3 1 5 2 v2 1 2 3 4 5 1 如何计算以 R 为基数的 Spearman 尺尺距离 所有元素的总位移 可灵活用于任意两种尺寸排列n 例如 对于这两个向量 如下 1被感动了2地点来自v1 to v2
  • 如何为多个开发人员使用 git

    对于经验丰富的 Git 用户来说 这是一个非常简单的问题 我已经在 git 托管上创建了存储库并设置了我的电脑 git init git remote add origin git sourcerepo com git 然后 经过一些更改后
  • 爪哇。 GUI WindowBuilder 通过单击按钮从 JTextField 读取

    I m useing WindowBuilder and I want to ask how to search in a text file for specific word which I enter to JTextField by
  • 如何在 Python 中使用 Selenium 获取
    1. 元素的长度?

    我有一个 ol 在我的 HTML 中列出 如下所示 ol li class foo li li class foo li li class foo li li class foo li ol 我需要做的是验证 ol 列表包含 li 内的项目
  • ReaderWriterLockSlim 和 async\await

    我有一些问题ReaderWriterLockSlim 我无法理解它是如何发挥作用的 My code private async Task LoadIndex if File Exists FileName index txt return
  • 在 vi 中删除连续的重复行而不排序

    这个问题 https stackoverflow com questions 351161 removing duplicate rows in vi已经解决了如何删除重复行 但强制首先对列表进行排序 我想执行删除连续重复行步骤 即uniq
  • 带数组的 SwitchMap 运算符

    我正在尝试学习 rxjs 和 Observable 的一般概念 并且有一个场景 我有一类
  • 如何防止引用的包含搜索当前源文件的目录?

    海湾合作委员会提供 I 选项 其中 I之前的目录 I 搜索引用的包含 include foo h and I以下目录 I 搜索括号内的包含 include