Visual Studio 2012:从链接中排除已编译的文件

问题描述 投票:0回答:1

我有一个简单的 C 语言项目,其中有一些正在编译的文件。它们被编译为 .obj 文件,然后链接在一起。到目前为止一切顺利,现在我需要从链接中排除这些文件之一。

我知道这很不寻常,但这正是我所需要的:编译文件但不将其链接到项目的输出文件。使用 Visual Studio 2012。

我不知道链接器在哪里获取要链接的文件,尽管我一直在查看项目属性和 vcxproj 文件中的各个位置。必须是编译器传递已编译文件的列表。是否可以自定义此构建阶段?

在 Visual Studio 2010 中,很容易从链接中排除文件:默认情况下,所有编译的文件都存储为

$(IntDir)%(FileName).obj
。如果 .obj 文件存储在其他地方(在我的例子中它只是
%(FileName).obj
),则它不会被链接。 VS2012 似乎链接了所有实际编译的文件,无论它们的位置如何。

如果我将文件名更改为

%(FileName).obj.x
,没有任何变化,链接器仍然链接它。

我知道我可以将文件编译为构建后事件,但我希望将文件编译为标准构建过程的一部分。

build visual-studio-2012 linker object-files
1个回答
1
投票

让我回答我自己的问题。这个问题有以下三种解决方案:

  1. 构建后事件编译文件。这样,Visual Studio 对文件一无所知;以标准方式构建它的许多优点都消失了。

  2. 正如@HansPassant建议的那样,单独的项目编译该文件。这不会阻止链接步骤,因此会生成不必要的文件,并且构建速度会慢一些。就我而言,将文件移动到另一个项目是有问题的,因为它自然属于原始项目。

  3. 我使用了我一开始忽略的预链接事件。我用一个链接的空文件重写了编译后的文件。虽然有点棘手,但对我来说可以接受。

© www.soinside.com 2019 - 2024. All rights reserved.