vs2008 建一个工程test 添加两个相同源文件test.cpp,这两个test.cpp不在同一个文件夹, 两个test.cpp都写了一个全局testFun()函数, build 工程test,居然不报错, 但如果一个工程两个不同文件名的源文件,都写一个testFun()函数,build工程会报错重定义testFun,
这是编译依赖的问题,编译cpp的时候都会检查对应的obj是否比当前cpp新,如果新的话就不编译当前cpp文件了。
造成的结果就是始终一个cpp没有被编译。
如果你修改编译选项让不同目录的cpp 输出到不同的文件夹,那么检查obj的问题就不会出现了。
于是就给你报连接错误。
解决此问题的方案a:
修改编译选项,将obj文件生成位置设置到跟源文件同一目录。IDE设置 :C++ -> output files -> Obj file name
将obj默认输出目录$(IntDir)改成$(InputDir)\obj\
方案a有一个缺陷,源文件夹会产生很多obj文件,管理上有些混乱。