一个工程很大,需要很多的文件。
如果都是我们自己写的文件,我们一般不会把实现不同功能的两个文件命以相同的名称。
但是,如果我们引入了第三方库的源码,这样就很有可能有相同名字的文件存在。
比如很多库都喜欢定义一个base.h文件用于放置一些最基本的东西。
这个时候,如果你的目录包含的不是很清晰的时候,你的编译器就会出现警告:
warning LNK4042: 对象被多次指定;已忽略多余的指定
我们暂且不说Google style把警告当错误看待。
你以为你可以忽略这个警告,那是打错特错的。
举个例子,你自己定义一个file.cc文件,里面实现了一些函数方法,比如你写了一个函数获取文件的路径:GetFilePath();
这个时候,你引入了一个第三方库,而且为了方便调试,你引入了源码。而这个库也包含一个名为file.cc的文件。
这个时候,build的时候,出现了上面的警告。
再编译你自己写的file.cc的时候就会出现错误了:
error LNK2001: 无法解析的外部符号
为什么?
就是因为这个警告,忽略了多余的指定。
解决方案:
项目上 右键 -> 属性 -> C/C++ -> 输出文件 -> 对象文件名 改为:
$(IntDir)/%(RelativeDir)/