编程经验:由于路径设置引起的VS2010不能正确输出文件的bug~

前段时间,偶然遇到这样一个bug,我把静态库项目都配置好了,编译一切正常,但是提示了一个警告:

1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(1153,5): warning MSB8012: TargetName(stereo_vc9) 与 Library 的 OutputFile 属性值()不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName)
和 $(TargetExt) 属性值与 %(Lib.OutputFile) 中指定的值匹配。

起初并没有在意,后来编译其他win32项目的时候,要用到这个库,结果让我大跌眼镜,提示我库找不到了,我比较奇怪,就去了指定路径下查看,果然没有!!

究竟是哪里出了问题?经过一番“折腾”,没发现任何错误的地方,没办法,只能与正确的静态库项目进行对比,我发现只有一处区别:

图1. 正常配置

图2. 异常配置

这是唯一的区别,我将输出文件写成相同的内容“$(OutDir)$(TargetName)$(TargetExt)”,重新编译,警告消失,编译通过,生成文件出现了!

知其然,更要知其所以然,根据警告内容“目标文件名stereo_vc9与lib的输出文件不符合”,VS2010中用了很多宏用于替代重要的参数或者路径,像 $(OutDir)、$(TargetName)
和 $(TargetExt) 分别指代了“目标文件夹所在路径”、“目标文件名”,“目标文件名后缀”,而$就代表提取对应宏的值。知道这些,原因就很清楚了,是由于“配置属性->常规->输出目录”、“配置属性->常规->目标文件名”、“配置属性->常规->目标文件扩展名”是与“$(OutDir)$(TargetName)$(TargetExt)”是一一对应的关系,为空自然会无法输出。

大家如果好奇,可以将“$(OutDir)$(TargetName)$(TargetExt)”替换为自己的路径(须与“配置属性->常规“中设置的不一致),输出的结果可能会没有,可能会以后者为优先,道理是一样的。

如果想查看宏的值究竟是什么,可以任意选择一个配置框,如下所示进行查看:

图3. 宏值

可能本文说的这个bug,早就有朋友注意到了,之所以写出来,是因为不希望大家因为这个问题浪费时间,太不值得了。

时间: 2024-10-08 06:40:35

编程经验:由于路径设置引起的VS2010不能正确输出文件的bug~的相关文章

java相对路径设置

在java中相对路径的设置是一个比较头痛的问题:配置文件应该写在哪里,"/","./"等各自代表着什么含义,普通的java工程和jsp(servlet)的路径有什么不同,这都是我们特别需要留意的.不然在程序开发中会死得很惨(个人以前深有体会,看似很简单的路径设置,往往要花很多的时间才能搞定). 一.Java Project 1. 普通目录的读取 如果com.taobao.jifeng下的TestPath.java要读取jifeng文件夹下的file.txt文件,路径

flash编程基础1----文档类路径设置

文档类路径设置 文档类的作用是把flash和as关联起来,我们只要在as中写代码来控制显示对象和程序逻辑.但是经常会碰到一些问题: 无法在类路径中找到该文档类的定义,包名称不能反映此文件的位置.下面我们通过一个例子来解决这个问题. 假如在包com.as3.mytest.eventTest下有两个文件:test.fla,EventTest001.as,我们要把这两个文件关联起来.EventTest001.as的包名默认为com.as3.mytest.eventTest像这样: package co

VS2010 项目属性的默认包含路径设置方法

VS2010 项目属性的默认包含路径设置方法 分类: c++小技巧2014-01-10 10:16 1358人阅读 评论(0) 收藏 举报 c++ 有两种方法可以设置vs2010的默认包含路径 方法一: 点击“视图->属性管理器”,在打开的属性管理器中选择Microsoft.Cpp.Win32.user打开 打开后将出现如下图所示: 这时候就可以设置默认目录了. 方法二: 打开 C:\Users\Administrator\AppData\Local\Microsoft\MSBuild\v4.0

C++的XML编程经验――LIBXML2库使用指南[转]

C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML库,而且它同时支持多种编程语言:2)LIBXML2库的Tutorial写得不太好,尤其是编码转换的部分,不适用于中文编码的转换:3)网上的大多数关于Libxml2的介绍仅仅是翻译了自带的资料,没有详细介绍如何在windows平台下进行编程,更很少提到如何解决中文问题. 基于以上几点原因,决定写一个在

前端编程经验的总结

功能界面设计,涉及到的技术有前端的CSS+DIV布局,以前布局使用表格,框架,现在布局基本上 使用区块的浮动布局. 功能界面实际的一般思路是: >1. 首先是要有项目的需求分析,完成需求说明的文档,这个部分右需求分析是完成. >2. 功能界面的设计,这部分由美工和网站策划师完成. >3. 前端工程师完成功能界面的实现,必须分毫不差的实现美工的效果. >4. 布局完成,渲染完成之后,即可以为表单添加特效,校验及其他的特效等,也就是      前端工程师的脚本编程. >5. 有些

Windows网络编程经验小结

转自:CSDN网友的强贴,其ID:gdy119 (夜风微凉) 1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: BOOL bReuseaddr=TRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2. 如果要已经处于连接状态的soket

嵌入式C编程经验 之 全局变量猛于虎

/********************************************************************************* * Filename: 一线研发之声:嵌入式C编程经验 之 全局变量猛于虎 * Author:SedateFire          E-mail:[email protected] * Version:1.001                 Time: 2012-01-05 * key: 嵌入式  os-less  全局变量 

XCode环境变量及路径设置

一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝对路径的问题不大,但是如果你把工程发给别人,别人就要在改这个绝对路径,这时候绝对路径的缺点立马出现. 所以在修改User Header Search Paths这个选项的时候使用"$(SRCROOT)/当前工程名字/需要包含头文件所在文件夹"将上面的双引号里面的字符串拷贝之后,你会发现这个“$(SRCROOT)”,会自动变成当前工程所以的目录. 这样就可以了,发给别人,别人

编程统计制定路径的文件格式

方法一: 1 #编程统计制定路径的文件格式 2 import os 3 format_file =dict() 4 count=0 5 for each in os.listdir('E:\\'): 6 count+=1 7 (former, latter) = os.path.splitext(each) 8 if latter not in format_file: 9 format_file[latter]=1 10 else: 11 format_file[latter]+= 1 12