【发布时间】:2012-12-31 02:57:34
【问题描述】:
我有一个较大的 C++ 项目,源文件组织在多个文件夹中(在文件系统上)。
在其中两个文件夹中,我有同名的文件。 例如
\MyProject\foo\Blurp.cpp
\MyProject\foo\File.cpp
\MyProject\bar\File.cpp
\MyProject\bar\Knoll.cpp
该项目是跨平台的,我在 linux 和 OSX 上使用 autoconf,但在 W32 上必须使用 MSVC(由于我在 W32 上使用的一些第 3 方 C++ 库和编译器之间的 C++ 二进制接口不兼容)
在 MSVC 方面,该项目也被组织成多个“过滤器”(那些虚拟文件夹)(名称大致对应于文件所在的目录),因此我可以区分它们。
现在的问题是,当我构建项目时,MSVC 将目标文件放在一个平面目录中,我最终得到:
\MyProject\Release\Blurp.obj
\MyProject\Release\File.obj
\MyProject\Release\Knoll.obj
可以看出,只有一个File.obj,因此缺少一个二进制对象。
显然,链接器会抱怨,因为它找不到在丢失的目标文件中定义的类/函数/...。
有没有办法告诉 MSVC 根据这些文件所在的目录(或过滤器)创建具有唯一名称的对象文件?
我想像这样:
\MyProject\Release\foo\Blurp.obj
\MyProject\Release\foo\File.obj
\MyProject\Release\bar\File.obj
\MyProject\Release\bar\Knoll.obj
或
\MyProject\Release\foo-Blurp.obj
...
或其他。 我知道的所有其他构建系统(CMake、autotools)都能够处理多个同名文件。
这个问题类似于3729515,但我目前坚持使用VS2008。 (为 VS2008 建议的解决方案 - 为每个有问题的文件设置对象目录 - 在理论上确实有效,但出于实际原因我想避免)
【问题讨论】:
标签: visual-studio-2008 visual-c++ filenames