首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编地图

汇编地图
EN

Stack Overflow用户
提问于 2021-01-21 10:57:08
回答 1查看 85关注 0票数 0

假设一个复杂的项目(在C/C++中),是否有一种解决方案可以知道哪些源文件负责/使用哪些源文件来创建特定的二进制文件,而无需编译项目本身。

我知道我可以读取Makefile并尝试像这样遵循依赖链,但是它不是很可伸缩,如果使用多个Makefile和/或隐式规则,可能会很困难。

非常感谢你的帮助

PS:为了澄清第一个注释,我正在寻找一种方法,它不需要有一个有效的构建环境(例如,编译,即使是一个尝试运行,也不是一个选项)。

EN

回答 1

Stack Overflow用户

发布于 2021-01-21 12:55:54

是否有一种解决方案可以知道哪些源文件负责/用于创建特定的二进制文件,而无需编译项目本身

如果您使用GCC (或者可能是嘎吱声)编译,您可以使用适当的预处理选项 (如-M )生成并保存一些文本文件中的依赖项,格式为GNU制造或忍者构建自动化工具可以接受的格式。这在像Debian这样的Linux发行版上运行得很好。

您还可能对其他构建程序感兴趣,包括奥麦克,以及包管理器(如欧帕姆urpmi等).

您也可以与SoftwareHeritage团队联系。

如果使用GCC,则可以编写自己的GCC插件来维护数据库中的这些依赖关系。

最后,注意赖斯定理,并考虑一些疯狂的例子(在C++中),如

代码语言:javascript
复制
   #if __TIME__[0]=='1'
   int something=0;
   #else
   constexpr int something=1;
   #endif

所以我现在的直觉是你的愿望是不可能的。我可能会误解它。

请参考一些C标准(如n1570 )或一些C++标准(如n3337 )。

研究像GNU autoconf这样的工具的行为。

想一想生成C或C++代码的程序,比如野牛,Mymanydl.c双峰大口RefPerSys .注意,GCC有许多C++代码生成器(特别是庚型),而且肯定是“一个用C++编码的复杂项目”。

另见从无到有

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65825929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档