编译与多文件
#include 有什么作用? 文件展开 以便于引用一些已经完成的代码
库(library) 已完成供别人使用的代码 std::cout << “Hello World” << std::endl; a = pow(b, c); // a = bc 常用C++库: STL(Standrad Template Library)
一个C++文件如何被编译出来 预处理 汇编 编译 链接
一个C++文件如何被编译出来 编译 链接 将.cpp编译为二进制的.o文件 将二进制文件链接成为可运行文件
链接 链接 对象文件 .obj/.o .cpp编译产物 链接成完整的程序 动态链接库 .dll/.so 静态链接库 .lib/.a 库文件 在运行时即时链接 不需要参与编译 库文件 相当于多个.o文件的合集
最简单的多文件实例 calc.h main.cpp calc.cpp 注意不要循环引用
编译环境的准备 编译器 GNU GCC(g++) 开源、跨平台 MSVC 不推荐,单平台且对新标准支持少 依赖库 Windows: 一般使用MinGW搭建编译环境,许多编译好的库可以使用 Linux: 有时需要自己下载库的源码进行编译,但对开发友好,使用包管理器解决依赖问题简单。(推荐Ubuntu GNOME) Mac OS: 兼具两者优点,可以使用homebrew。 IDE 对大型开发友好,方便进行多文件程序的编写、编译、运行。 推荐:Code::Blocks, Clion, Qt Creator, Visual Studio
在Path最后加上 ;(MinGW目录)\bin Mac OS Ubuntu Windows VS Mac OS: 使用homebrew安装g++ Ubuntu: 使用apt-get安装g++ 将~\bin 添加至path环境变量 环境变量: 此电脑(属性)→高级系统设置→环境变量 在Path最后加上 ;(MinGW目录)\bin (或者新加一行)
开始编译吧! 1 2 最简单的方式 一些常用的编译选项: g++ main.cpp calc.cpp -o main –Wall 等价于 g++ -c main.cpp -o main.o g++ -c calc.cpp -o calc.o g++ main.o calc.o -o main 一些常用的编译选项: –Wall –g –std=c++11 -O2 使用g++ 1 使用IDE 2 CMAKE
开始编译吧! 1 2 以Code::Blocks为例: File →New… →Project… →Empty project 使用g++ 使用g++ 1 使用IDE 2 CMAKE
开始编译吧! 1 2 不同的IDE之间存在着差异 不能要求每个使用代码的人都安装和作者一样的IDE来编译代码 需要一种更为简易、普适、无图形界面要求的解决方案 GNU make (makefile) 类似一种脚本语言,描述了整个工程如何编译 CMake 一种更为优秀的管理方案,编写简单。运行后生成makefile 使用g++ 1 使用IDE 2 CMake
开始编译吧! 1 2 CMake的一般使用方式: mkdir build && cd build cmake .. make make install 具体使用方法见各个库发布网站上的README 使用g++ 1 使用IDE 2 CMake
Thanks! Q & A