是否可以在一个visual studio c ++项目中使用相同名称的源文件?

TC.*_*TC. 3 c++ macros visual-studio

我正在为我正在学习的c ++课程开发一个静态库项目.老师坚持认为我们只为每个源文件定义一个函数,将属于同一类的文件/函数分组到每个类的子目录中.这导致了如下结构:

MyClass
    \MyClass.cc (constructor)
    \functionForMyClass.cc
    \anotherFunctionForMyClass.cc 
OtherClass
    \OtherClass.cc (constructor)
Run Code Online (Sandbox Code Playgroud)

这是不是好的做法是我不想讨论的事情,因为我只是以这种方式组织我的项目.

我正在使用visual studio 2008,并且在两个类中使用同名函数(以​​及文件名)时会出现奇怪的链接错误.这似乎是由于visual studio将所有.obj文件(每个源文件一个)放在一个中间目录中,在编译具有相同名称的源文件时覆盖先前生成的目标文件.

这可以通过根据输入文件的相对路径将目标文件放在子目录中来解决.Visual Studio允许用户配置它生成的目标文件的名称,并在那里使用宏,但似乎没有"输入文件的相对路径"的宏.

那么,有没有办法让这个工作?如果没有,为每个班级使用一个项目最好的解决方案?

Igo*_*aka 6

您是对的,默认情况下,所有目标文件都放在同一目录中,其文件名基于源文件名.我能想到的唯一解决方案是在这里更改冲突文件的输出文件路径:

项目属性-C/C++ - 输出文件 - 对象文件名http://img37.imageshack.us/img37/3695/outputfile.png

PS.这听起来像讲师有一个蹩脚的(可能由讲师自己编写)自动代码验证器,强加了这种限制.要获得额外的标记,请提供重写解析器,使其适用于普通/理智/非奇怪的项目布局.


Sha*_*ode 5

真实答案:

更改

C/C++ =>输出文件=>输出文件名

$(IntDir)/%(RelativeDir)/

每个.obj文件都将在子文件夹中创建,因此它不会覆盖以前的链接.