Contents

C/C++ 编译构建

从自己遇到的大工程出发,理解多文件的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中的配置