免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4802 | 回复: 8
打印 上一主题 下一主题

[Linux] gcc可以做到把多个源文件合并成一个吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-02 21:55 |只看该作者 |倒序浏览
本帖最后由 lucutz 于 2015-06-02 22:13 编辑

据我了解,在有多个源文件情况下,gcc是分别编译然后链接。我现在有特殊的需求,需要gcc能在前端预处理的时候把多个.c文件合并,生成一个.c文件(包括对头文件的处理),不知道现在的gcc能做到这一点吗? 如果gcc做不到,不知道有没有其它的编译器或是工具可以做到?

期待牛人解答,多谢~~

PS: 再透露一点项目背景,我最终的目的是想把程序中的某个函数单独提取出来(当然,包括其调用的所有子程序以及所有用到的变量)编译成独立执行的程序。这个项目以前做过,全手工,一个一个眼盯,粘帖复制,太累太耗时。现在需要重做,所以希望能有工具帮助加快进度。如果gcc或其它工具能首先帮我把所有.c文件合并成一个,然后我就可以快速的去掉不被该函数调用的函数和使用的变量。

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
2 [报告]
发表于 2015-06-02 22:03 |只看该作者
这个应该不行,gcc在编译的时候,会对每一个.c文件生成一个.o文件,最后在链接成一个可执行文件或者是库文件(动态或者静态的)
预处理的阶段会进行一些宏替换等等,不会把所有的.c文件合并成一个.c文件

论坛徽章:
0
3 [报告]
发表于 2015-06-02 22:14 |只看该作者
回复 2# zsszss0000
我编辑了原帖,加了点背景信息,你可以看看,谢谢你的参与

   

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2015-06-03 17:31 |只看该作者
在一个源文件中include需要合并的文件

论坛徽章:
1
巨蟹座
日期:2013-12-10 15:23:59
5 [报告]
发表于 2015-06-04 16:25 |只看该作者
#include "xxx.c"

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
6 [报告]
发表于 2015-06-05 09:32 |只看该作者
hellioncu 发表于 2015-06-03 17:31
在一个源文件中include需要合并的文件

他的意思大概是只提取用到的
类似.o连接后,反向提取源代码库

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
7 [报告]
发表于 2015-06-05 10:39 |只看该作者
流氓无产者 发表于 2015-06-05 09:32
他的意思大概是只提取用到的
类似.o连接后,反向提取源代码库


生成执行文件后,根据符号再从源码中提取?

论坛徽章:
0
8 [报告]
发表于 2015-06-09 00:12 |只看该作者
以上各位可能不太明白我的意思,这个事情不需要gcc的编译和后端代码生成,只是在前端进行source to source变换。把一个函数用到的变量、函数(包括其所调用的子函数,也就是递归式)统统拿出来,单独构成一个源程序,然后编译。其实要做到这一步,除了我希望的上述做法外,从.o文件里面提取也是一种方法,不过这是binary-level的操作,不是source-level的操作。我希望是能编译的。

目前我能想到的就是通过ast(abstraction syntax tree)操作,这样比较精准,但是相比于基于正则表达式的文本处理方法,比较有难度;要这么做,必须要一个前端处理,不知道gcc的前端能不能干这个?这几天也看了clang,还在消化中。

论坛徽章:
0
9 [报告]
发表于 2015-06-10 01:19 |只看该作者
流氓无产者 发表于 2015-06-05 09:32
他的意思大概是只提取用到的
类似.o连接后,反向提取源代码库

请问“.o连接后,反向提取源代码库”是一种什么技术?如何做到?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP