c - Visual Studio 不一致地生成 .lib

标签 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,但这不会造成问题。只有当他们使用相同的语言时,我才看到问题所在。

最佳答案

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

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

关于c - Visual Studio 不一致地生成 .lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25876773/

相关文章:

c++ - 使用 Cmake 文件链接错误以在 Visual Studio 中构建 Qt 项目

c - OpenCL。数组寻址/指针的奇怪错误

c# - 在单元测试中使用 StringBuilder 进行 PInvoking

c - 句子倒转功能

visual-studio - 为什么 Entity Framework 模型浏览器不显示?

visual-studio - Visual Studio 2010:在PowerShell中动态构建工具窗口

c# - 在 Visual Studio 内访问 Microsoft Azure

c - 如何使用指针调用结构体内部的结构体?

c++ - 我从我的字符串函数返回到 main 函数的是什么?

c# - 如何编辑 Entity 框架生成的 sql 查询?