【发布时间】:2010-01-04 12:07:33
【问题描述】:
我正在为我正在学习的一门 C++ 课程开发一个静态库项目。老师坚持我们每个源文件只定义一个函数,将属于同一类的文件/函数分组到每个类的子目录中。这会产生如下结构:
MyClass
\MyClass.cc (constructor)
\functionForMyClass.cc
\anotherFunctionForMyClass.cc
OtherClass
\OtherClass.cc (constructor)
我不想讨论这是否是好的做法,因为我只是不得不以这种方式组织我的项目。
我在 Visual Studio 2008 中工作,在两个类中使用同名函数(以及文件名)时不知何故出现了奇怪的链接错误。这似乎是由于 Visual Studio 将所有 .obj 文件(每个源文件一个)放在一个中间目录中,在编译同名源文件时覆盖了之前生成的目标文件。
这可以通过根据输入文件的相对路径将目标文件放在子目录中来解决。 Visual Studio 允许配置它生成的目标文件的名称并在其中使用宏,但似乎没有“输入文件的相对路径”的宏。
那么,有什么方法可以让它工作吗?如果不是,每个班级使用一个项目是最好的解决方法吗?
【问题讨论】:
-
你确定 VS 会覆盖之前生成的目标文件吗?你得到什么链接错误?
-
@Serge:事实上,它实际上似乎是在编译第一个源文件后跳过编译。我在定义缺失函数的文件中抛出了一个#error,并且没有出现编译错误。将文件重命名为不同的名称会导致文件被编译。无论如何:编译项目后只有一个目标文件。
-
我在这里能看到的唯一好处是,你正在努力了解 VS2008 的真正工作原理,这样当别人把自己画到角落里时,你就会知道去哪里看 - 一个非常黑暗的角落。
-
@TC:我问的原因是我在 VS2005 的不同目录中创建了一个包含两个同名源文件的测试项目,它构建得很好。 VS 在第二个对象文件名的末尾添加一个“1”(例如“test.obj”和“test1.obj”)。所以也许问题不在你认为的地方。
-
@Serge:这是VS2008中引入的问题
标签: c++ visual-studio macros