问题:我有一个大型的Visual C++项目,我正在尝试迁移到Visual Studio 2010.它是各种来源和不同年龄段的大量组合.我遇到了问题,因为有些事情包括winsock.h
和winsock2.h
.
问题:显示#include
Visual Studio C++源文件的层次结构有哪些工具和技术?
我知道cl /P
获取预处理器输出,但是没有清楚地显示哪个文件包含哪些其他文件(在这种情况下/P
输出为376,932行8-)
在一个完美的世界中,我想要分层显示哪些文件包含哪些其他文件以及行号,以便我可以跳转到源代码:
source.cpp(1)
windows.h(100)
winsock.h
some_other_thing.h(1234)
winsock2.h
Run Code Online (Sandbox Code Playgroud) 我正在研究Visual Studio 2008中的一个大型C++项目,并且有很多文件带有不必要的#include
指令.有时#include
s只是工件,一切都会被删除,但是在其他情况下,类可以向前声明,#include可以移动到.cpp
文件中.是否有任何好的工具可以检测这两种情况?
我正在寻找一个工具(最好是一个Visual Studio插件),它可以显示给定文件包含的所有文件,并显示这些文件包含的所有文件,依此类推.
一位同事最近向我透露,我们的一个源文件在编译期间包含了超过3,400个标题.我们有超过1,000个翻译单元在构建中进行编译,导致对标题的巨大性能损失,这些标题肯定不会全部使用.
是否有任何静态分析工具可以揭示这样一片森林中的树木,特别是让我们有能力决定我们应该在哪些方面进行削减?
UPDATE
在Boost Library Documentation页面上,有两个名为" Header Only Libraries "和" Automatic Linking "的类别.
我认为"仅限头文件库"意味着您不必链接Boost.Timer
库以便使用它们,而"自动链接"意味着您必须链接.
但是当我使用时timer
,我必须链接一个名为的静态或动态库libboost_timer.a
(libboost_timer.so.1.48.0
以及Boost.Timer
各种软链接到linux lib路径下的这些),这显然是确切的库文件Boost.System
.我甚至需要来链接Boost.Chrono
和Boost.Asio
,虽然这是可以理解的是,库本身使用的是需要链接一些其他的库.
另一方面,asio
已明确声明Boost.Timer
属于"自动链接",但没有任何类似的库文件timer
.
那么,作为" 仅限标题库 "还是" 自动链接 " 实际上意味着什么呢?还是纯粹是一个错误?
我正在做一个非常大规模的项目,编译时间很长.我可以在Linux上使用哪些工具(最好是开源)来查找包含最多的文件并优化其用途?为了更清楚,我需要一个工具,根据依赖关系,我会告诉我哪些标题最多.顺便说一句,我们使用分布式编译
我有一个非常大的代码,其中很多是遗留代码.我想知道所有这些文件中哪一个参与编译.代码是用GNU编译器编写的,主要用C/C++编写,但也有一些在其他程序中编写.任何建议将受到高度赞赏.
谢谢,
卡察夫.
我在linux下编译混合脚本/ makefile.我想以某种方式用一个工具"包装"这个构建,该工具将给出构建中使用的所有源文件的输出,最好是具有绝对路径名.
你说什么?
我试图"武装"编译一个C文件,它包括递归的许多头文件..我正在尝试找到这些头文件的列表..有一个更简单的方法来查找它包括的所有头文件的列表?
在 Linux 上,确定#include
C++ 项目所需的必要语句的快速方法是什么?
我的意思是,假设有人从网络上给你一个片段,但没有提供必要的 #include 语句。有没有一种方法可以让您运行 Linux 命令或编译器命令选项并确定缺少哪些函数或类,并且作为奖励,在硬盘驱动器上确定头文件中可能包含这些内容的位置。
我正在用C语言编写Conway的生命游戏的一些实现.源代码分为三个文件:main.c
和functions.c
/ functions.h
,我在其中放置函数定义和声明.
现在,要创建一个单元格网格,我有一个这种类型的矩阵:
Cell grid[GRID_HEIGHT][GRID_WIDTH];
Run Code Online (Sandbox Code Playgroud)
where GRID_HEIGHT
和GRID_WIDTH
是常量定义在functions.h
:
#define GRID_HEIGHT 10
#define GRID_WIDTH 10
Run Code Online (Sandbox Code Playgroud)
程序运行正常,使用make和Makefile编译.但问题是:如果我尝试更改,GRID_HEIGHT
或者GRID_WIDTH
当我再次运行我的Makefile时它会说所有文件都是最新的!我已经尝试使用良好的方式进行编译,gcc main.c etc.
并且它应该运行.那么,为什么make不重新编译源代码呢?
这是我的Makefile:
CC = gcc
OBJECTS = main.o functions.o
Game\ of\ Life : $(OBJECTS)
$(CC) $(OBJECTS) -o Game\ of\ Life -lncurses
%.o : %.c
$(CC) -c $<
Run Code Online (Sandbox Code Playgroud) 我需要从类中实例化一个对象,比如说Cat,并且知道它包含的文件的名称.
主程序看起来应该是这样的:
#include <iostream>
#include <vector>
#include "Cat.h"
using namespace std;
vector<string> getIncludes(Cat cat){
...
}
int main(int argc, char *argv[])
{
Cat cat;
std::vector<string>list = getIncludes(cat);
}
Run Code Online (Sandbox Code Playgroud)
而Cat类头文件将是这样的:
#include "utils.h"
#include "animals.h"
class Cat{
public:
Cat();
~Cat();
void meow();
private:
int age;
}
Run Code Online (Sandbox Code Playgroud)
打电话后std::vector<string> list = getIncludes(cat)
,list
应该包含"utils.h"
和"animals.h"
.
如果还有另一种方法可以在主函数中获取这些名称,我愿意接受建议.先感谢您.