Chinaunix首页 | 论坛 | 博客
  • 博客访问: 201507
  • 博文数量: 63
  • 博客积分: 1970
  • 博客等级: 上尉
  • 技术积分: 600
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-22 14:26
文章分类

全部博文(63)

文章存档

2013年(2)

2012年(11)

2011年(19)

2010年(6)

2007年(11)

2006年(14)

分类: C/C++

2012-10-08 17:59:06

Visual Studio里的几个输出的设置及一些文件的作用
>
OutPut Directory ,它的值不会直接影响到你文件的输出,但它会间接的影响其他输出,比方说默认值中包含有$(OutDir).
Intermediate Directory ,中间目录,生成的obj文件,预编译头,预编译相关的idb及pdb,buildlog都会在这里.
idb 是系统生的成的状态信息,可以加速随后的编译
pdb 包含调试信息
Linker->General->OutPut File,输出文件,虽然填的是exe的路径,但.ilk文件会按这个路径输出.
Linker->Debugging->Genrerate Program Database File,输出的pdb文件
Linker->Advanced->Import Library 指示了将随同dll生成的lib文件输出的文件名和路径
DSW:全称是Developer   Studio   Workspace,最高级别的配置文件,记录了整个工作空间的配置信息,她是一个纯文本的文件,在vc创建新项目的时候自动生成   
DSP:全称是Developer   Studio   Project,也是一个配置文件,不过她记录的是一个项目的所有配置信息,纯文本文件   
OPT:与DSW、DSP配合使用的配置文件,她记录了与机器硬件有关的信息,同一个项目在不同的机器上的opt文件内容是不同的   
CLW:记录了跟ClassWizard相关的信息,如果丢失了clw文件,那么在Class   View面板里就没有类信息   
PLG:实际上是一个超文本文件,可以用Internet   Explorer打开,记录了Build的过程,是一个日志型文件   
RC:资源描述文件,记录了所有的资源信息,在资源编辑器里作的修改,实际上都是对RC文件的修改   
RC2:附加的资源描述文件,不能直接资源编辑器修改,只能手工添加,可以用来添加额外的资源   
RES:经过资源编辑器编译之后的资源文件,以二进制方式存放   
SBR:编译器生成的浏览信息文件,在代码导航的时候非常有用,她需要在编译时指定/FR或者/Fr开关   
BSC:BSCMAKE.EXE将所有的SBR文件作为输入,经过处理之后输出一个BSC文件,在代码导航的时候实际用到的是BSC文件   
ILK:当选定渐增型编译连接时,连接器自动生成ILK文件,记录连接信息   
PDB:全称是Program   DataBase,即程序数据库文件,用来记录调试信息,是一个相当重要的文件,没有他,程序无法正常调试   
LIB:如果项目输出是Dll的话,一般会输出一个跟项目同名的Lib文件,记录输出的函数信息   
EXP:同Lib,是跟Dll一起生成的输出文件   
PCH:全称是PreCompiled   Header,就是预先编译好的头文件,在编译时指定/Yu开关时编译器自动生成
关于,ilk文件及渐增式编译连接
:       VS2005编译时出现这样的错误:
: Compiling...
: Image.cpp
: Linking...
: LINK : warning LNK4076: invalid incremental status file "Debug/code.ilk";
:             linking nonincrementally
: code.exe - 0 error(s), 1 warning(s)
原因:
VC编译时可以选择incremental linking(渐增式编译),也就是每次重新编译并不编译
所有的源文件,只编译改动过的文件。而编译器怎么知道哪些编译过哪些每编译过呢,
除了检查修改时间外,这个ilk文件也是很重要的信息。
如果你因为误操作或者VC自己的BUG引起了ilk文件的损坏,下一次编译时当然无法根据
ilk进行incremental linking了。但是在这种情况下也没什么大问题,VC自己会解决的,
所以也只出了一个警告。
解决办法:
把Dubug目录下.ilk文件强行删掉再重新编译一次就行了。


修改VS2010主题颜色
  打开 Tools\Extension Manager 这个扩展管理器,搜索“visual studio color theme editor”,我们就能看到一个名为“visual studio color theme editor”的扩展,下载安装好这个扩展,重新启动 Visual Studio ,在 View菜单后面就会多出一个 Theme 菜单来,里面已经预置了几种主题。


VC++6.0 用VS2010编译
vc6的一个mfc的项目,在vs2010用静态"Use MFC in a Static Library"编译出现这个错误:
 fatal error C1189: #error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
1>

-->Runtime library 换成 "Multi-threaded (/MT)" 即可

【转】vs2010的sdf文件和ipch文件夹 

如何关闭?

vs2010打开某个工程 ,转换成功之后,在工程目录看见一个sdf文件和一个ipch文件夹,都超大(起码几十M),我一个四百多k 的工程,结果用vs打开过后变成了两百多兆。Google之后,一下结果~~
大家也许发现了,visual studio 2010 中新建一个项目会同时建立一个ipch目录与sdf文件,即使你删掉它,再次打开工程时还是会重新建立。动辄30、50M的容量让我们心里很不爽。其实这是2010的一个新功能,与智能提示,错误提示,代码恢复、团队本地仓库等等息息相关的东西。如果大家觉得很不爽可以关掉它。Tools —— Options —— Text Editor —— C/C++ —— Advanced ——Disable Database 设置为True,默认为false。这样,你关闭visual后删掉工程目录下的ipch与sdf就不会再产生了
我的是中文旗舰版 一样 工具 选项 文本编辑器 c/c++ 高级 禁用数据库 的值设为true、
在 VS2010 中建立一个 c++ 解决方案,打开编辑,然后发现在解决方案的目录下出现 $(SolutionName).sdf 文件,并且非常大,同时还有一个很大的目录 ipch ,让有洁癖的人非常反感(比如本人)怎么办呢?

不关闭,放到指定的位置
上网搜索发现可以通过选项关闭一些功能来消除这些文件和目录,但是关闭后使用起来非常不爽,例如没有了智能提示;再次上网搜索发现一些人提到事件函数都无法正常添加了;
再次查看 Menu / Tools / Options / Text Editor / C/C++ / Advanced 中的选项,发现有一个 Fallback Location 的属性组,通过查看说明,决定修改默认值试一试,将“Always Use Fallback Location” 设置为 true,将"Do Not Warn If Fallback Location Used" 设置为 true , 然后删除解决方案目录下的 sdf 文件和 ipch 目录,再次打开解决方案 , 发现这些烦人的东西已经不见了,呵呵!
那么那些文件放置到那里了呢?看 "Fallback Location" 属性说明:这是存储浏览信息数据库和 IntelliSense 文件的第二个位置,如果不指定则放置到临时目录中;到临时目录一看,里面有一个 VC++ 的目录,都在那个目录里面呢;
我不喜欢和那些临时的垃圾文件放置在一起,干脆把 "Fallback Location" 属性也设置一个固定的路径来存储,直接把这个路径指定为 T:\VS2010;
因为 T 盘是 2G 的 RAMDISK 这也加快了 VS2010 的 IntelliSense 的速度;

C:\vs2010FallbackLocation  C:为SSD

md /mdd /ml /mt/mtd 的意思

VC编译选项 多线程(/MT)
多线程调试(/MTd)
多线程 DLL (/MD)
多线程调试 DLL (/MDd)
C 运行时库                        库文件
Single thread(static link) ML            libc.lib
Debug single thread(static link) MLd        libcd.lib
MultiThread(static link) MT            libcmt.lib
Debug multiThread(static link) MTd            libcmtd.lib
MultiThread(dynamic link) MD            msvert.lib
Debug multiThread(dynamic link) MDd        msvertd.lib 
3. 各种 C 运行时库的区别
( 1 )静态链接的单线程库
静态链接的单线程库只能用于单线程的应用程序, C 运行时库的目标代码最终被编译在应用程序的二进制文件中。通过 /ML 编译选项可以设置 Visual C++ 使用静态链接的单线
程库。
( 2 )静态链接的多线程库
静态链接的多线程库的目标代码也最终被编译在应用程序的二进制文件中,但是它可以在多线程程序中使用。通过 /MT 编译选项可以设置 Visual C++ 使用静态链接的多线程库。
( 3 )动态链接的运行时库
动态链接的运行时库将所有的 C 库函数保存在一个单独的动态链接库 MSVCRTxx.DLL 中, MSVCRTxx.DLL 处理了多线程问题。使用 /MD 编译选项可以设置 Visual C++ 使用动态
链接的运行时库。
/MDd 、 /MLd 或 /MTd 选项使用 Debug runtime library( 调试版本的运行时刻函数库 ) ,与 /MD 、 /ML 或 /MT 分别对应。 Debug 版本的 Runtime Library 包含了调试信息
,并采用了一些保护机制以帮助发现错误,加强了对错误的检测,因此在运行性能方面比不上 Release 版本。 
下面是msdn关于Visual C++ 编译器选项的说明:
这些选项选择单线程或多线程运行时例程,指示多线程模块是否为 DLL,并选择运行时库的发布版本或调试版本。
选项     说明
/MD     定义 _MT 和 _DLL 以便同时从标准 .h 文件中选择运行时例程的多线程特定版本和 DLL 特定版本。此选项还使编译器将库名 MSVCRT.lib 放入 .obj 文件中。
用此选项编译的应用程序静态链接到 MSVCRT.lib。该库提供允许链接器解析外部引用的代码层。实际工作代码包含在 MSVCR71.DLL 中,该库必须在运行时对于与 MSVCRT.lib 链
接的应用程序可用。
当在定义了 _STATIC_CPPLIB (/D_STATIC_CPPLIB) 的情况下使用 /MD 时,它将导致应用程序通过静态多线程标准 C++ 库 (libcpmt.lib) 而非动态版本 (msvcprt.lib) 进行链接
,同时仍通过 msvcrt.lib 动态链接到主 CRT。
/MDd     定义 _DEBUG、_MT 和 _DLL,以便从标准 .h 文件中选择运行时例程的调试多线程特定版本和 DLL 特定版本。它还使编译器将库名 MSVCRTD.lib 放入 .obj 文件中。
/ML     使编译器将库名 LIBC.lib 放入 .obj 文件中,以便链接器使用 LIBC.lib 解析外部符号。这是编译器的默认操作。LIBC.lib 不提供多线程支持。
/MLd     定义 _DEBUG 并使编译器将库名 LIBCD.lib 放入 .obj 文件中,以便链接器使用 LIBCD.lib 解析外部符号。LIBCD.lib 不提供多线程支持。
/MT     定义 _MT,以便从标准头 (.h) 文件中选择运行时例程的多线程特定版本。此选项还使编译器将库名 LIBCMT.lib 放入 .obj 文件中,以便链接器使用 LIBCMT.lib 解析
外部符号。创建多线程程序需要 /MT     或 /MD(或它们的调试等效选项 /MTd 或 /MDd)。
/MTd     定义 _DEBUG 和 _MT。定义 _MT 会导致从标准 .h 文件中选择运行时例程的多线程特定版本。此选项还使编译器将库名 LIBCMTD.lib 放入 .obj 文件中,以便链接器使
用 LIBCMTD.lib 解析外部符号。创    建多线程程序需要 /MTd 或 /MDd(或它们的非调试等效选项 /MT 或 MD)。
/LD     创建 DLL。
将 /DLL 选项传递到链接器。链接器查找 DllMain 函数,但并不需要该函数。如果没有编写 DllMain 函数,链接器将插入返回 TRUE 的 DllMain 函数。
链接 DLL 启动代码。
如果命令行上未指定导出 (.exp) 文件,则创建导入库 (.lib);将导入库链接到调用您的 DLL 的应用程序。
将 /Fe 解释为命名 DLL 而不是 .exe 文件;默认程序名成为基名称.dll 而不是基名称.exe。
如果还未显式指定 /M 选项之一,则将默认运行时库支持更改为 /MT。
/LDd     创建调试 DLL。定义 _DEBUG。
    警告   不要混合使用运行时库的静态版本和动态版本。在一个进程中有多个运行时库副本会导致问题,因为副本中的静态数据不与其他副本共享。链接器禁止在 .exe 文件内
部既使用静态版本又使用动态版本链接,但您仍可以使用运行时库的两个(或更多)副本。例如,当与用动态 (DLL) 版本的运行时库链接的 .exe 文件一起使用时,用静态(非 
DLL)版本的运行时库链接的动态链接库可能导致问题。(还应该避免在一个进程中混合使用这些库的调试版本和非调试版本)。




阅读(9799) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~