参考文献地址:
1.https://devblogs.microsoft.com/visualstudio/a-guide-to-vcxproj-and-props-file-structure/
2.https://blog.csdn.net/huhaoxuan2010/article/details/76797588
3.https://blog.csdn.net/zdl543/article/details/17880195
自动化程序编译需要理解编译的每个环节,确保项目模块划分。
.vcxproj文件大概结构
< Project ToolsVersion = “ 4.0 ” xmlns = “ http://schemas.microsoft.com/developer/msbuild/2003 ” >
设置通用参数
< Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
< ImportGroup Label = “ PropertySheets ” />
< Import Project="$(SolutionDir)\props\ThirdLib.props" />
< PropertyGroup Label = “ UserMacros ” />
< PropertyGroup Condition="’
(
C
o
n
f
i
g
u
r
a
t
i
o
n
)
∣
(Configuration)|
(Configuration)∣(Platform) == ‘Debug|Win32’ " >
< LinkIncremental >true< /LinkIncremental >
< PropertyGroup />
< ItemDefinitionGroup />
< ItemGroup />
</ Project >
最后在解释一下 LinkIncremental
编译器在link的时候会check .obj或.o或.lib文件是否发生改变,若发生改变则需要重新编译,再link,生成目标文件。
例如我们在调试某段代码,突然发现有个小bug,那么我们修改过后打算重新链接,编译器会如何处理?
1.所有代码重新编译,然后再次link
2.初次编译时为每个局部代码预留一部分空间,当出现问题时局部代码重新编译,其他部分不做修改,这样二进制文件的局部更新,其他部分不变,大大缩短了重新编译的时间。
这也是为什么Debug生成的文件会远远大于Release生成的文件,虽然< LinkIncremental >true< /LinkIncremental >可以设置开关,但是release在link的时候自动跳过这个开关!!!