我在Visual Studio 2015中有一个相当大的多项目C ++解决方案。一些项目编译为其他项目使用的静态库,并且大多数项目使用预编译头来加速编译。每个项目还有多个构建配置:调试,发布和几个测试配置,它们总是构建一个可执行文件来运行测试(即使正常配置构建一个静态库)。
在构建调试和发布配置时,或者在进行完全重建时,一切都运行良好,但是当为使用另一个项目的静态库的项目执行测试配置的增量构建时,我得到C2859错误导致构建失败。
例如,假设我有一个构建静态库的项目peach
和一个依赖cobbler
的项目peach
。 cobbler
的预编译头仅引用系统和外部库(解决方案内没有头)。 cobbler
test
个配置参考peach.lib
。 peach.lib
由peach
release
配置创建,因此我有一个名为cobbler-test
的解决方案配置,指定:
peach
使用其release
项目配置cobbler
使用其test
项目配置。从头开始构建cobbler-test
(或重建它,清理和构建等)工作正常。但是,如果我在crust.cpp
中修改名为cobbler
的源文件并尝试构建,我会收到此错误:
c:\...\cobbler\src\crust.cpp(1): error C2859: C:\...\out\cobbler-test.pdb is not the pdb file that was used when this precompiled header was created, recreate the precompiled header.
同样,只有在使用与当前项目配置名称不同的项目配置名称构建的同一解决方案引用静态库时,才会发生这种情况。使用release
或debug
的两个项目,增量构建工作正常。
每次都必须进行完全重建,否则首先会破坏使用预编译头的目的。有没有办法让增量测试配置工作而不必为每个项目组合创建额外的项目配置?
答案 0 :(得分:0)
我目前解决这个问题的方法是不使用测试配置,而是创建单独的项目来测试生成静态库的项目。这允许所有依赖项目使用相同的项目配置,并允许预编译的头文件在执行增量构建时不会起作用。
虽然这对于静态库非常有效,但由于它们可以使用#pragma comment(lib, ...)
轻松导入,因此对于构建独立可执行文件的项目来说,这会有点问题。值得庆幸的是,就我而言,大多数项目都没有很多需要测试的东西。