Visual Studio不一致地生成.lib

时间:2014-09-16 19:20:13

标签: c visual-studio visual-studio-2012 fortran static-linking

我有一个包含多个项目的Visual Studio 2012解决方案,但我目前只关注两个。项目A是用C编写的静态库,项目B是用C编写的可执行文件。项目B依赖于项目A,并且在项目依赖项设置中指定。

问题在于,如果我重建项目B,我会得到error LNK1104: cannot open file 'projectA.lib'。但是,如果我首先重建项目A,然后构建项目B,则没有问题。

奇怪的是,项目B的重建实际上并没有像我期望的那样创建projectA.lib,尽管我在“输出”窗口中看到了这一行:

2> projectA.vcxproj -> C:\<build_location>\projectA.lib

当我重建项目A时,我也看到了这一行,在这种情况下,它确实会被创建。如果我只是重建项目B,为什么不生成文件,我该如何解决?

编辑:

我发现这个问题对于其他两个具有相似关系的项目也存在。我们称它们为项目C(静态库)和项目D(可执行文件)。两者都是用Fortran编写的,并使用Intel Composer XE 2013进行编译.D依赖于C.再次,重建D不会像人们期望的那样创建C,但构建C工作正常。 (与A不同,它不需要重建,只需构建。)

值得注意的是,B也依赖于C,但这不会引起问题。只有当他们使用相同的语言时我才能看到问题。

1 个答案:

答案 0 :(得分:0)

问题在于我设法将所有四个项目放在同一个目录中。显然,构建过程的某些部分使用元文件或使用特定于编译器的名称而不是项目特定名称的临时文件,并且在一个目录中使用相同编译器的多个项目意味着这些文件被重用和覆盖。

问题的解决方案是将每个项目移动到其自己的目录。您可以将一个C和一个Fortran项目放在一个目录中,但是如果您必须像我一样开始创建新目录,那么您也可以为每个项目创建一个。