C/C++ 编译构建
Contents
从自己遇到的大工程出发,理解多文件的c/c++工程是怎么工作的
C/C++ 编译构建
#define
与#ifdef
等
宏(MARCO
),代表批量处理
#define
是进行宏替换,在预处理阶段直接进行文本替换
所以最常用的是通过这个表示一个常量,也可以用其替换一个函数等等,总之是文本的替换,相当于它帮你进行了 查找-替换
预处理阶段还能有选择性地保留某部分代码进行编译
#include <stdio.h>
#include <stdlib.h>
int main(){
#ifdef _DEBUG
printf("正在使用 Debug 模式编译程序...\n");
#else
printf("正在使用 Release 模式编译程序...\n");
#endif
system("pause");
return 0;
}
这里就是如果有定义_DEBUG
,则保留第一个printf,而第二个printf不进行编译
在VS当中的 属性::C/C++::预处理器::预处理器定义中便是在定义宏
这在跨平台开发、debug和release的区别毕竟常见
#if
是根据常量表达式,#ifdef
是看宏是否有被定义过
#define
和#ifdef
配合使用,就启动了不同options下不同版本的编程效果
make与cmake
make是一个批处理工具,相当于执行脚本
通过makefile中的命令进行编译
而cmake可以自动生成makefile,它更具CMakeList.txt中的配置