VisualStudio项目中多个同名文件处理

发布时间:2023年12月26日

现象

在vs2019环境中,现在开发一个较大的C++项目,它的源文件在多个文件夹中组织(在文件系统上)。在其中两个文件夹中,有几个同名的文件。如:

.\ConsoleApplication1\JAMGEN_CONFIG_x4_test\firls.c
.\ConsoleApplication1\NoiseConfig_test\firls.c

两个firls.c中的函数名称都是一样的,只是函数实现的逻辑不一样

在VS2019工程可以多添加几个"筛选器"(虚拟文件夹),这些虚拟文件名称大致与文件所在的目录对应,这个就把文件名相同的文件隔离开了。添加的方法如下图所示:

现在的问题是,当我构建这个项目时,VS2019把目标文件放在一个单一的目录中,结果是:

.\ConsoleApplication1\Debug\firls.obj

程序编译完你可以在输出窗口看到一条警告:

提示文件firls.c已经有了,再次编译它时忽略多余的指定;此时程序并没有报错,只是编译给了警告提示;但是程序的逻辑后面一个调用firls.c里面的函数的执行结果肯定是不对的。

此时我把.\ConsoleApplication1\NoiseConfig_test\firls.c里面的函数名称改一下,换一个不同的函数名称,Debug目录还是看一样:

.\ConsoleApplication1\Debug\firls.obj

但是编译的时候出错了,如下图所示:

看来还是不行,那是因为函数名称改了,在之前编译的firls.obj找不到这个函数,链接报错了。是否有一种方法可以让MSVC根据目录(或过滤器)来创建具有惟一名称的对象文件?我想这样:

.\ConsoleApplication1\Debug\JAMGEN_CONFIG_x4_test\firls.obj
.\ConsoleApplication1\Debug\NoiseConfig_test\firls.obj

解决方案

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

$(IntDir)%(RelativeDir)

具体设置如下图所示:

设置完,在编译一次,在Debug目录下,果然分目录生成.obj文件,像这样:

.\ConsoleApplication1\Debug\JAMGEN_CONFIG_x4_test\firls.obj
.\ConsoleApplication1\Debug\NoiseConfig_test\firls.obj

达到预期的效果了,注意配置的时候使用源文件的相对源文件夹。注意%,但是如果您的源文件位于您的项目目录中,其中包含..\。

文章来源:https://blog.csdn.net/haokan123456789/article/details/135219128
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。