首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在c头文件更改后,Cabal不会重建项目

在Cabal构建系统中,当我们修改了C代码中的头文件后,Cabal默认不会重新构建项目。这是因为Cabal会缓存已经构建过的中间文件,以提高构建速度。但是,由于C头文件的修改可能会导致C代码的依赖关系发生变化,从而影响到项目的构建结果。因此,我们需要手动告诉Cabal重新构建项目。

要解决这个问题,我们可以采取以下步骤:

  1. 清除Cabal构建缓存:我们可以使用cabal clean命令来清除Cabal构建系统的缓存文件。这将删除所有已构建的中间文件和构建缓存,使得下一次构建时会重新生成这些文件。
  2. 强制重新构建项目:在清除了构建缓存后,我们可以使用cabal build --rebuild命令来强制重新构建整个项目。这将重新编译所有源文件,包括C代码和相关的头文件。
  3. 检查依赖关系:如果在重新构建项目时遇到了依赖错误或链接错误,我们可能需要检查C代码中的头文件包含路径和依赖库的链接设置是否正确。确保所有的依赖关系都被正确地包含和链接到项目中。

总结起来,要解决在Cabal中更改C头文件后不重新构建项目的问题,我们需要清除构建缓存,并使用--rebuild选项来强制重新构建整个项目。此外,还需确保C代码的依赖关系和头文件包含路径设置正确。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Debian 7上的Yesod,Nginx和MySQL(Wheezy)

沙箱功能可确保将站点的依赖项安装到站点所在的文件夹中,因此cabal不会破坏/home/yesod/.cabal中安装的软件包。...然后沙箱中安装项目所需的包: cabal install --enable-tests ....由于沙盒机制,不同的站点不会相互影响。 使用MySQL 测试站点的脚手架之前,您需要在MySQL中创建一个用户和几个数据库。...发出命令cabal build,您的应用程序(myblog)将被构建并放入$HOME/myblog/dist/build/myblog/。这是我们要部署的程序。您可以将目录移动到任何位置。...请按Ctrl-C立即停止。 如果您希望您的站点作为守护程序运行,这意味着一个恒定的运行状态下,您可以创建一个init.d脚本。

82020

HeRMs :一个命令行食谱管理器

例如,你可以使用以下命令 Arch Linux 及其变体(如 Antergos、Manjaro Linux)中安装 cabal: sudo pacman -S cabal-install Debian...、Ubuntu 上: sudo apt-get install cabal-install 安装 Cabal ,确保你已经添加了 PATH。...为此,请编辑你的 ~/.bashrc: vi ~/.bashrc 添加下面这行: PATH=$PATH:~/.cabal/bin 按 :wq 保存并退出文件。然后,运行以下命令更新所做的更改。...source ~/.bashrc 安装 cabal ,运行以下命令安装 herms: cabal install herms 喝一杯咖啡!这将需要一段时间。几分钟,你会看到一个输出,如下所示。...herms view 1 image.png 要编辑任何食谱,使用: herms edit 1 完成更改,按下 ESC 键。系统会询问你是否要保存。你只需选择适当的选项。

43420
  • 修完1300万行代码,我帮苹果省下2亿美元,但没拿到承诺的千万股票

    中有一行更改,而另一行的更改该类型实际上应当存在的文件中。 接着再次运行测试,发现首次测试中的其中一个头文件错误消失了。...这一更改之下,有接近 150 个项目未能顺利重建,iTunes 也在其中。 于是 Lambert 和 Ed 仔细研究,并修复了其中的每一个项目,以让它们都能够进行构建。...然后,Lambert 他们提交了头文件更改项目甚至“惊动”乔布斯 事已至此,Lambert 他们这时候必须回头再对整个项目进行一次可行性评估。...Lambert 回忆道,“我知道,对头文件进行强制性的更改,以及与之相关的项目更改,将会成为项目中最大的单个部分。一旦我们能够进行其他的测试,那么在其他方面将会有大量的‘可轻松实现的目标’需要解决。...不过 Lambert 等人已经把 Umesh(我不会告诉大家他的姓)给说服了,“因为他不希望我们去触碰他的 pthreads 代码,而且无论如何,他也希望在那儿做一些更改,有了这个项目作为反复推敲这些更改的手段

    32030

    软件质量的黄金准则

    这也就意味着如果一个项目的应用越广泛,那么开发者就会越发理所应当地认为会有人帮助他们解决一切问题。长久以往,这些开发者面对热门工具中的问题就会熟视无睹。... Java 中,如果想要修改嵌套结构资料中的数值,只需要将参照变数串起来,例如: a.b.c.d.e = 10 但是, Haskell 中则是每多一层,每个等号就会重复之前等号的序列并多一个取值用的函数...,例如: a <- a{b=(b a){c=(c (b a)){d=(d (c (b a))){e=10}}}} Haskell 社区 downstream 通过各种方式 ,包括 lens 在内的软件包...这种类型提倡在过程后期捕捉错误,错误不会在第一时间反馈,导致软件质量的降低。...Haskell 社区内的经典例子,cabal 与堆栈的分歧,源于 FPComplete 与 Cabal 贡献者之间的分歧(根据 Haskell 的 reddit 子版块反馈修正)。

    55120

    Make

    依赖列表加上分号,可直接跟上命令。 命令之间可以插入多个空行,但每行必须有Tab键,如果一行过长,可以在行末输入一个\,用反斜杠连接的行都被看成一行来处理,反斜杠和新行之间不能有空格。...伪目标: 先看以下代码: clean: -rm -rf *.o 因为clean没有依赖文件,所以clean被认为是最新,不会执行rm命令,若要执行rm,需要执行make clean命令。...特殊目标: .PHONY:伪目标,如上 .IGNORE:对于该目标的依赖文件,生成时如遇到错误则可跳过错误继续执行,不会中断make。...多个目标: 一个规则中可以有多个目标,这些目标有相同的依赖文件 搜索目录: 通常在一个大的项目中,会把头文件、源文件、库文件放在不同的目录下。当目录发生改变,只需改变依赖文件的搜索目录。.../headers表示../headers目录下搜索所有.h结尾的头文件。 变量: makefile中通常可定义变量,make执行时会把变量名出现的地方用变量值代替。

    2K100

    NXP的S32K144如何将静态库文件添加到 S32DS工程中?

    来源:技术让梦想更伟大 作者:李肖遥 我们经常使用静态库或者动态库,那么NXP的s32k144使用中,如何将静态库文件 (*.a) 添加到 S32 Design Studio GCC 项目中呢?...1添加一个不依赖于可执行(elf)文件的静态库 这种方法假设库不会改变,库的更新不会触发项目重建过程,如果库更改,则需要手动清理项目(假设没有其他源文件已更改),并且下一个构建链接更新的库。...点击 Project Properties -> C/C++ Build -> Settings -> Standard S32DS C Linker -> Libraries , 如下图 注意,GCC...- “触及”,有时需要触发项目重建,在这种情况下库应添加到不同的项目对话框中: 点击Project Properties -> C/C++ Build -> Settings -> Standard...S32DS C Linker -> Miscellaneous -> Other objects, 如下图 “Other objects”列表中的项目被传播到 USER_OBJS makefile 变量中

    5.1K10

    DEVC怎么建工程「建议收藏」

    (单独建一个文件夹存放) 项目建成功,打开项目管理,看到自动生成的一个main文件。注意每个项目只能有一个main函数,是系统的入口。...1.2 工程中新建c文件 项目管理中,右击项目名,选择New File,则可以项目新建一个c头文件。...比如新建头文件,可以头文件写结构体定义、函数声明内容,选择保存类型为*.h即可生成头文件 项目管理中多了自定义头文件student.h。其他c文件生成一样操作。...2.2 函数实现文件blog.c 头文件中定义函数,其实现尽量封装在一个独立c文件中,后续要修改,只要找对应c文件修改即可,这样避免我们的主文件main.c过长。...2.3 主函数文件main.c 主要实现分散各个c文件中的函数调用及一些主要数组、全局变量定义。

    74020

    ⭐️ 关键字深度剖析 ⭐️第二章(多文件数据类型&关键字externstatic)

    关键字-extern ---- 首先我们知道: 全局变量,是可以跨文件,被访问的 全局函数,是可以跨文件,被访问的 而跨文件使用需要声明,可以使用关键字extern来声明 注意:声明并不会开辟空间...,故变量声明的时候不能设置初始值 使用: 变量声明必须带上extern 函数声明建议带上extern 多文件 ---- 单纯使用源文件,组织项目结构的时候,项目越大会越复杂,而维修的成本会越来越高...,这时候我们需要建立头文件来减少维护成本 定义 //.h:我们称之为头文件,一般包含函数声明,变量声明,宏定义,头文件等内容(header) //.c: 我们称之为源文件,一般包含函数实现,变量定义等...> #include //test.c #include "test.h" //""包含头文件,目前只需要知道是自己写的头文件,就用""包含即可 //main.c #include...,整个“进程”运行生命周期都是有效的 注意:这个空间 不是内存!!!

    24730

    基于stm32的水质监测系统项目基础部分详细记录

    基于stm32的水质监测系统项目基础部分详细记录 软件环境:MDK5 硬件环境:STM32F103ZET6 开发板、颜色传感器、串口屏、串口打印机 搭建工程模板 进行项目软件的撰写时,首先新建一个基于该项目的工程模板...对于初学者,很多都是直接用开发板提供商提供的现成的工程模板,但是那样的工程模板项目开发中体态略显臃肿,而且如果直接用别人的工程模板,那么很多搭建工程模板的库文件的用法和功能我们不会很了解,因此,自己新建一个基于项目的工程模板是非常必要的...(2)USER:该文件夹中加入如下几个文件: ? (3)CORE: ? (4)OBJ: 该文件夹用来存放程序编译过程中产生的中间文件和编译的.hex文件。...新建工程时,keil会自动给你创建一个Objeting文件夹和一个Listing文件夹,用来存放这些文件,而不会把文件直接存到OBJ文件夹中,所以,需要我们手动把缓存文件的目录更改到OBJ。...其中inc是include的缩写,表示里面存放的是头文件(.h文件),src是source的缩写,表示里面存放的是源文件(.c文件)。

    73610

    腾讯云 CMQ 消息队列 Windows 环境下的使用

    生成库文件 1.建空项目 使用 VS 平台新建项目(建议选择空的项目),用于生成 CMQ C++ SDK 静态库和动态库文 件: 建好项目,导入附件 src 目录下所有源文件和头文件(包括 json...文件夹下的头文件,还有之前下载 curl 解压后里面的 curl.h 文件),导入完成项目结构如上图。...2.之后导入 curl 头文件 之后选择 C/C++→常规→附加包含目录: 自己下载的 curl 解压的路径 include 的下有 curl.h 文件,所以这个路径也需要加进来。...5.生成动态库(dll) 更改项目配置类型: 之后的操作流程跟静态库的流程基本相同,注意检查下所有的附加项和附加依赖项是否添加完整!这里务必检查下,因为更改配置类型,部分项需要重新添加。...CMQ SDK 使用 需要使用 cmq 的项目中,添加 cmq c++ sdk 的头文件路径和库文件路径,并在附加依赖库中输入 cmq c++ sdk 静态库。

    4.9K10

    4 种预编译头文件(PCH)削弱代码的方式

    如果使用得当,预编译头文件可以为您节省宝贵的编译时间。但如果使用不当,预编译头文件可能会隐藏源代码中的问题,而这些问题可能会在你尝试另一个项目中重复使用部分源代码时才被发现。...本文是Objective-C 中的代码气味系列文章中的一篇。 预编译头文件的用途 发明预编译头文件的目的只有一个:"加快编译速度"。与反复解析相同的头文件相比,这些文件只需提前解析一次。速度非常重要!...编译速度越快,就能越快查看最近的更改是否成功,越快完成反馈循环。...突然间,你要开发一个新项目,却没有一种简洁的方法来重用以前的代码,而又不会把它们都变成大量浪费的垃圾。...查找并修复缺失的 #import 由于 Xcode 将前缀头文件与预编译头文件结合在一起的方式,省略 #import 语句是一种常见的 Objective-C 代码气味。

    17710

    C ++ 中不容忽视的 25 个 API 错误设计!

    std::vector的项目中使用这个类,他们会得到一个错误“error C2872: ‘vector’: ambiguous symbol”。...例如,std :: vector不会使用你的API对象的移动构造函数,如果它可以抛出异常。这是因为,如果在移动中引发异常,则正在处理的数据可能会丢失,而在复制构造函数中,原始数据不会更改。...重要的是,这些默认值.cpp文件中指定,并且不在.h文件中公开。因此,API的更高版本可以更改这些值,而不会对公共接口产生任何影响。 补充说明: 不需要将所有默认参数实例转换为重载方法。...C ++中,由于以下原因,不应将#defines用于内部常量: 公共头文件中使用#define会泄漏实现细节。...对项目中的所有头文件重复该过程,使用自下而上的方法。随着代码库变大和代码块的移动,这将有助于防止随机构建的中断。

    1.5K20

    C++最佳实践 | 6. 性能

    本系列是开源书C++ Best Practises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。...隔离频繁更改头文件 不要包含不需要的头文件 编译器必须处理看到的每个include指令,即使只是在看到#ifndefinclude保护符立即停止,仍然必须打开文件并进行处理。...include-what-you-use[6]是一个可以帮我们确定需要哪些头文件的工具。 减少预处理器的工作 这是“隔离频繁更改头文件”和“不要包含不需要的头文件”的一般形式。...考虑使用预编译头文件 使用预编译头文件可以大大减少大型项目的编译时间,选定的头文件被编译成中间形式(PCH文件),编译器可以更快处理。...建议只将经常使用但很少更改头文件定义为预编译头文件(例如系统头文件和库头文件),以减少编译时间。但必须记住,使用预编译头文件有几个缺点: 预编译头文件不可移植。 生成的PCH文件依赖于机器。

    79621

    c语言进阶(1)

    变量修改完成,我们需要将修改的变量写会内存当中。...static  .h:头文件。组织项目结构的时候,减少大型项目的维护。 为什么要有头文件呢?单纯地使用源文件,组织项目结构的时候,项目越大越复杂的时候,维护成本会变得越来越高。...使用尖括号包含的是c语言的头文件,包含自定义用双引号。 那么在下面这个函数中,为什么show()函数未定义,程序还是能够运行成功呢?  ...如果只是单纯的int a;这个语句,编译器有可能把它认为是定义,而头文件当中并不包含,应该包含extern声明。 如果一个函数没有参数,但是我们给它传一个参数,竟然不会报错。...,该函数只本文件内被访问,不能被外部其他文件直接访问 3.static修饰局部变量,更改该局部变量的生命周期(将临时变量改为全局生命周期),作用域不变 全局变量和函数一旦被static修饰只能被同名的自身文件内被访问

    8210

    JNI中native方法的几种注册方式

    命令:javah 类名, 注:不需要class后缀 4.将(.h)头文件复制到vs下,创建(.cpp)或者(.c)文件实现(.h)头文件声明的方法 5.实现完成,编译成dll库 6.将dll复制到...java项目的根目录,调用System.loadLibrary("dll库名"); //注:不要dll后缀 7.代码里面调用native方法,访问native(.cpp 或者 .c)的代码 具体实现...方法来注册 java 方法与 JNI 函数的一一对应关系 实现流程 利用结构体 JNINativeMethod 数组记录 java 方法与 JNI 函数的对应关系; 实现 JNI_OnLoad 方法,加载动态库...是用于描述方法的参数与返回值,方法的签名 fnPtr 是函数指针,用来指向 jni 函数 区别: 静态注册 优点: 理解和使用方式简单, 属于傻瓜式操作, 使用相关工具按流程操作就行, 出错率低 缺点: 当需要更改类名...,包名或者方法时, 需要按照之前方法重新生成头文件, 灵活性不高 动态注册 优点: 灵活性高, 更改类名,包名或方法时, 只需对更改模块进行少量修改, 效率高 缺点: 对新手来说稍微有点难理解, 同时会由于搞错签名

    1.9K30

    动态库与静态库

    动静态库的本质: (.o文件:二进制目标文件) 如果一个工程,被分成了头文件、和好几个工程项目,比如我们使用C语言实现一个简单的计算器,包含加减乘除,然后把加减乘除分别分开写,比如是Add.c一个工程项目...,Sub.c一个工程项目等等,再使用main.c来调用它们。...前面我们gcc编译的时候,虽然已经加上了路径和库的名字,但是那个是给gcc说的,是告诉gcc的,gcc才能把代码编译起来,编译完,动态库就跟gcc没关系了。...因此: 方法一:环境变量里面添加库:更改 LD_LIBRARY_PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wjmhlh/lesson23/...动态库不会像静态库一样,直接拷贝可执行程序的代码区里面,而是动态库里指定的函数的地址,写入到可执行程序中,而这地址,暂且只需知道它是start:偏移地址,是起始地址+偏移地址的地址。

    2.3K30

    使用vs2019进行Linux远程开发的方法步骤

    vs进行远程开发分为两步: 创建远程环境的连接,随后让vs将远程环境中的系统头文件同步到本地(也可以指定其他地方的头文件,后面会讲解),c++的代码补全只需要头文件即可。...做好准备我们就该进入正题了。 创建项目 安装好c++ for Linux功能我们会在创建新项目的面板中看到Linux的选项,如图: ?...接着是配置的重点,首先是配置需要同步的远程环境的头文件,有了这些文件vs才能对你的代码进行自动补全和提示: ? 默认复制的路径通常已经包含了Linux上大部分的头文件,通常我们也不需要做更改。...头文件的同步发生在第一次构建项目成功或添加远程连接后手动同步。...如果你发现无法自动补全(通常发生在刚添加远程连接或是项目设置发生了变化),先试试关闭vs重新打开,如果没用请尝试刷新intellisense或重新同步头文件

    4.3K40
    领券