c++ - C++ Visual Studio 2010 & 2008中不能处理同名的源文件?

  显示原文与译文双语对照的内容

直接问题:如果有两个具有相同 NAME ( 但在不同的目录中)的文件,那么似乎只有 Visual Studio 2005能够透明处理这个问题? vs 2008 & 2010需要一系列调整? 除了我的命名惯例,我是否做了错误的事情?

背景:

正在开发 C++ 统计库。 我有两个文件夹:


/Univariate



Normal.cpp


Normal.h


Beta.cpp


Beta.h


Adaptive.cpp


Adaptive.h



/Multivariate



Normal.cpp


Normal.h


Beta.cpp


Beta.h


Adaptive.cpp


Adaptive.h



我需要支持交叉编译--我使用 G++/make将这些相同的文件编译到Linux中的一个库中。 他们工作正常。

我使用 Visual Studio 2005没有问题,但我需要升级到 Visual Studio 2008或者 2010 ( 目前已经在nvidia工具的nsight上 drooling ) 。 但是,如果我将文件添加到具有相同 NAME ( 即使它们位于不同的目录中)的项目中,则会遇到问题。 如果有其他问题,我想更改命名约定,但是否已经发现了这个问题,并且已经找到了任何文档?

如果你在项目中升级了两个项目,我可能会在不同目录中正确处理两个源文件,但是,如果删除了一个重复文件,则 :

distributionsreleaseadaptive 。obj: 警告 LNK4042: 对象指定了不止一次;忽略了附加项

现在我已经将中间目录指定为 $(ProjectName)$(Configuration) --需要将目标文件放在与源树不同的位置。 因这里,我可以看到为什么它正在复制对象文件,但是当项目从 2005到 2008转换为时,会添加一组条件编译:


<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>


<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>



这些可以从 C/C++ -> 输出文件中的源文件属性页访问->"对象文件名"&"xml文档文件名"。 但是,如果直接添加( 或者删除并添加它们),vs 不会抱怨,但是也不会添加条件指令 -- 。 我是在犯错误/错误假设,还是在 vs 2008/2010中发现了有效的Bug?

时间: 原作者:

所以 @Hans Passant指向了正确的方向,谢谢 ! 你不必列出文件,文件夹是足够的。 然后,如果查看 vs 2010列表底部定义的MACROS,你将看到:

%(RelativeDir)/子变量/

这个问题实际上是一个简单的版本,我在--上工作的一些文件夹和一些 NAME 冲突。 因此,我真的想让它成为"固定"。

如果右击解决方案资源管理器中的项目,请选择 C/C++ ->"输出文件"并在"对象文件名"框中键入以下内容:

$(IntDir)/%(RelativeDir)/

注意,我也从瀑布中选择了( 。所有配置,所有平台) 。 这将编译目录层次结构中所有镜像源树的文件。 VS2010将通过创建这些目录来开始构建,如果它们不存在的话。 这里外,对于那些在目录名称中讨厌空白的人来说,这个宏会删除所有空间。

我想让--完全等于我的makefile在Ubuntu方面工作的方式,但仍然保持源代码树干净。

原作者:
...