硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1409|回复: 15
收起左侧

[MDK] 各类IDE编译器有没有可能以后提供智能化编译,不会添加了几千个C文件,全部都编译一轮

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106995
QQ
发表于 2021-12-22 13:16:28 | 显示全部楼层 |阅读模式

各类IDE编译基本都是这样的,添加到工程的C,全部都会编译器一次,达到上千个文件后,时间贼长。
智能化后,仅编译用到的几个文件。



回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
发表于 2021-12-22 14:02:30 | 显示全部楼层
本帖最后由 emwin 于 2021-12-22 14:03 编辑

我目前RTT的工程是拆分的,内核生成个库,应用代码链接库。
在IAR/MDK可以下拉选择子工程,有必要时手动更新下库。
而且仿真时能定位到源代码,怎么做到的不太清楚。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106995
QQ
 楼主| 发表于 2021-12-22 15:08:20 | 显示全部楼层
emwin 发表于 2021-12-22 14:02
我目前RTT的工程是拆分的,内核生成个库,应用代码链接库。
在IAR/MDK可以下拉选择子工程,有必要时手动更 ...

你的意思是使用lib编译,倒是可以,就是不够智能。
回复

使用道具 举报

14

主题

62

回帖

104

积分

初级会员

积分
104
发表于 2021-12-24 14:41:08 | 显示全部楼层
IDE要事先根据link文件分析你的调用树,然后把有用的文件传给编译器。分析调用树本来是连接器的工作,还在编译之后,这一代IDE应该是实现不了了
回复

使用道具 举报

0

主题

159

回帖

159

积分

初级会员

积分
159
发表于 2021-12-25 19:51:12 | 显示全部楼层
事实上,添加了新C文件后,再次编译时只会编译这个新文件,而更改了include文件或者include路劲后再次全部编译,以前试过MAKEFILE也一样,因为编译后的o目标文件,通常包含目标代码信息,使用只要C这种语言的编译原理不变,估计很难。。反倒以后CPU线程数越多,可能编译更快而已
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106995
QQ
 楼主| 发表于 2021-12-26 09:27:53 | 显示全部楼层
laxsystem01 发表于 2021-12-25 19:51
事实上,添加了新C文件后,再次编译时只会编译这个新文件,而更改了include文件或者include路劲后再次全部 ...

有时候没准,仅动了个小地方,也来个全编译。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106995
QQ
 楼主| 发表于 2021-12-26 09:28:28 | 显示全部楼层
apleilx 发表于 2021-12-24 14:41
IDE要事先根据link文件分析你的调用树,然后把有用的文件传给编译器。分析调用树本来是连接器的工作,还在 ...

这种机制下,感觉很难了。
回复

使用道具 举报

24

主题

122

回帖

194

积分

初级会员

积分
194
发表于 2021-12-31 18:07:50 来自手机 | 显示全部楼层
测试完第一时间打包生成库。
回复

使用道具 举报

2

主题

269

回帖

275

积分

高级会员

积分
275
发表于 2021-12-31 19:41:25 | 显示全部楼层
eric2013 发表于 2021-12-26 09:27
有时候没准,仅动了个小地方,也来个全编译。

那是因为改了bsp。h吗?每个。c都包含了它
回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2021-12-31 22:27:17 | 显示全部楼层
我一直有种想法就是自己写好驱动然后封装成库,后面脱离硬件去调用,但是奈何实力不足,写的不够模块化,涉及到硬件的部分大概可以通过注册的方式执行?
回复

使用道具 举报

2

主题

269

回帖

275

积分

高级会员

积分
275
发表于 2021-12-31 23:21:58 | 显示全部楼层
Leo20201027 发表于 2021-12-31 22:27
我一直有种想法就是自己写好驱动然后封装成库,后面脱离硬件去调用,但是奈何实力不足,写的不够模块化,涉 ...

可以啃下周立功的ametal,我试了下连他们的片子都不用了。。。
https://gitee.com/zlgopen/ametal
回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2021-12-31 23:48:33 | 显示全部楼层
cctv180 发表于 2021-12-31 23:21
可以啃下周立功的ametal,我试了下连他们的片子都不用了。。。
https://gitee.com/zlgopen/ametal

感谢告知,元旦学一下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106995
QQ
 楼主| 发表于 2022-1-1 00:24:07 | 显示全部楼层
yxydoctor 发表于 2021-12-31 18:07
测试完第一时间打包生成库。

使用库会导致宏定义不起作用了,不方便后面修改。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106995
QQ
 楼主| 发表于 2022-1-1 00:25:08 | 显示全部楼层
Leo20201027 发表于 2021-12-31 22:27
我一直有种想法就是自己写好驱动然后封装成库,后面脱离硬件去调用,但是奈何实力不足,写的不够模块化,涉 ...

回调函数,通用的玩法。
回复

使用道具 举报

24

主题

122

回帖

194

积分

初级会员

积分
194
发表于 2022-1-1 12:35:49 | 显示全部楼层
是的,库是MCU工程师的福音。但调试过程中,打库,解库,循环往复是常有的事。
起作用的还是那个宏定义。有些宏定义,你可以做个宏定义接口文件,把宏定义转为变量。这样库不受影响。
但有些宏定义是某些code是否编译的开关,那就比较麻烦了,解库必须,MCU搞到一定程度确实会很烦。
也就纳闷了,你说套个threadx全家桶,MPU就不行么,非得走MPU标准流程是么?
什么交叉编译,什么瞧不上windows。不过是如牛仔裤上的破洞一样,换了个新名词而已
回复

使用道具 举报

1

主题

33

回帖

36

积分

新手上路

积分
36
发表于 2022-1-3 14:42:22 | 显示全部楼层
基本所有IDE和make工程都会在源码变更后才会更新object目标文件, 在目标文件变更后再链接生成可执行文件.
当然这里的源码变更也包含依赖项的变更, 比如一个头文件被10个文件直接间接包含, 这个头文件时间改变(而不是内容)就会导致10个目标文件需要重新编译.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 14:23 , Processed in 0.261042 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表