我可以禁用在同一目录中生成obj文件吗?适用于我所有的项目吗?

3

我正在整理我的项目,发现可以通过添加 %TEMP% 来删除 object 文件夹:

rd /s /q "%TEMP%\obj"

但我希望能够在构建后自动删除 obj 目录或者设置全局配置来实现。有什么方法可以做到吗?


你为什么想要删除对象文件夹? - Oded
因为在创建二进制文件后它们不再需要。在归档时,它们只是不必要的兆字节。 - blez
2个回答

1

你在使用源代码控制吗?
这个评论听起来好像你没有:

在归档时,那些不需要的兆字节。

(“归档”有点像定期将整个项目文件夹复制到类似于 backup_yyyymmdd 的地方)

如果你还没有使用源代码控制,你应该考虑开始使用它。

除了一般的优点(例如,具有带有日期和注释的更改历史记录...),它还有一个针对你的 obj 文件夹问题的开箱即用的解决方案:

所有好的源代码控制软件都支持忽略某些文件或文件夹,你可以定义它们(忽略意味着:它们永远不能提交到源代码库中,即使它们被更改,你甚至看不到它们在更改文件列表中的位置)。

例如,在我使用的 Mercurial 中,忽略设置保存在主文件夹中名为 .hgignore 的文件中(Git 也是一样,只是称为 .gitignore)。

我所有Visual Studio项目的默认.hgignore文件如下:

syntax: glob
bin
obj
*.suo
*.user

第一行属于Mercurial的忽略语法,其余是设置要忽略的内容。
您可以看到binobj文件夹被忽略了...无论它们在哪个子文件夹中都会被忽略!

因此,我不必关心obj文件夹实际上在哪里,也不必每次构建解决方案时手动删除它们。它们在我的源代码控制历史记录中根本不存在。


此外,我有一个关于将所有内容放在一个单一输出文件夹中的Fuji答案的变体:
我也喜欢这样做,但我更喜欢在Visual Studio项目设置中更改输出文件夹,而不是使用后期构建事件。
默认的输出文件夹是:
- bin\Debug\ - bin\Release\
我将它们更改为:
- ..\build\Debug\ - ..\build\Release\
这将编译所有内容到与.sln文件相同级别的build文件夹的子文件夹中(这意味着:解决方案中的所有项目直接编译到同一个文件夹中)。 它还减少了编译时间,因为Visual Studio在编译后不必复制所有依赖项(因为所有内容已经在同一个文件夹中)。
(我主要是因为编译时间而这样做,因为我忽略了上面描述的Mercurial中的bin和obj文件夹,所以我不在乎它们实际上在哪里)

我对源代码控制有同样的想法,但不确定因为他从未回答过我的最后几个问题。 :) - eandersson

1

我个人喜欢在项目中有一个特定的Output文件夹,用于存放所有已编译的文件。

我在后期构建事件中使用以下命令行。

copy "$(TargetPath)" "$(SolutionDir)\Output\$(TargetFileName)"

这将把编译后的文件复制到解决方案内的输出目录。您需要将此添加到解决方案中的所有项目。

如果您有任何需要复制的依赖项,也可以添加类似以下内容的代码。

copy "$(ProjectDir)Dependencies\Language.xml" "$(SolutionDir)\Output\Extensions\Language.xml"

[编辑]

您可以尝试先复制文件,然后在完成后删除对象文件夹。

copy "$(TargetPath)" "$(SolutionDir)\Output\$(TargetFileName)"
rd /s /q "$(ProjectDir)\obj"

[EDIT2] 已更新并附上截图以进行说明。:)

这是编译项目后我的对象文件夹通常的样子。 enter image description here

这是使用上述命令编译后的样子。正如您所看到的,Visual Studio在事件之后重新创建了文件夹,但是文件夹是空的。 enter image description here

您可能需要双重检查是否以提升的权限运行Visual Studio。要这样做,只需右键单击Visual Studio并选择“以管理员身份运行”。


很有趣,但是当你使用.dll和其他文件时,你也必须复制它们。另外,我想摆脱obj。 - blez
我尝试了rd /s /q "$(SolutionDir)obj",但它并没有删除obj文件夹。 - blez
它在我这边可行,但我的猜测是它会再次重建。你检查了文件夹的内容吗?还是只是看文件夹本身?你还需要确保使用 ProjectDir,而不是 SolutionDir - eandersson
@blez,如果这种方法不起作用或者您需要其他解决方案,请随时更新您的问题。 :) - eandersson
请记住,Visual Studio将重新创建一些内容,因此我认为您无法完全删除文件夹而不使用第三方程序,但是使用该命令应该可以清除其中的内容。 - eandersson
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接