visual-studio-2008 - 具有多个同名源文件的 Visual Studio 项目?

标签 visual-studio-2008 visual-c++ filenames

我有一个较大的 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++ 二进制接口(interface)不兼容)

在 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 建议的解决方案 - 为每个有问题的文件设置对象目录 - 在理论上确实有效,但出于实际原因我想避免)

最佳答案

也许您可以将项目范围的“对象文件名”(配置属性->C/C++->输出文件)设置为

$(IntDir)%(RelativeDir)

它使用源文件的相对源文件夹。注意 % ,但是如果您的源文件位于项目目录之外,包含..\,这会变得很难看。

关于visual-studio-2008 - 具有多个同名源文件的 Visual Studio 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364362/

相关文章:

visual-studio - 从 .NET System 类中提取接口(interface)

visual-studio-2010 - 尝试加载格式不正确的程序集

c++ - 控制 VS 2008/2010 中的尾随结构填充? (#pragma pack 还不够好)

Python 3 删除文件字符串的一部分

c++ - Cstring - 调试断言失败;缓冲区太小

c# - 如何加快加载启动画面

c++ - Visual C++ 内存块填充

c++ - 错误 LNK2019 : unresolved external symbol

ios - 获取使用 SSZipArchive 解压缩的文件的文件名

ruby-on-rails - S3 上的 Rails + ActiveStorage : Set filename on download?