搭建 Mac 系统下的 C++ 开发环境
一、打开 App Store,搜索 Xcode 并下载。
二、打开 Xcode,选择左边第二项,创建一个新的 Xcode 项目。
需要注意的是, Xcode 默认的 C++ 编译器是 Apple LLVM Compiler(4.6.3 的版本为 4.2)也就是 Clang,默认的 C++ 标准库 为 libc++(Clang 提供的标准库),目前已经支持 C++ 11 (先前的 C++0x)标准。Xcode 同时也提供 LLVM GCC 编译器,其附带的 C++ 标准库为 libstdc++(GNU C++ 标准库)。在引入一些第三方库的时候,需要注意这些选择,如 OpenCV,可能就需要将标准库设置为 libstdc++。
IDE 由于集成了如文档、自动补全、可视化的环境配置等特性,很方便用于项目开发,但如果不用 IDE ,那怎样直接使用命令行编译 C++ 项目?很简单,直接使用编译器。
C++ 编译过程
在介绍编译器之前,先简单地说一下 C++ 的编译过程,以便理解编译器的工作。
编译(compiling)并不意味着只创建仅仅一个可执行文件。创建一个可执行文件是一个多级过程,其中最重要的过程是预处理(preprocessing),编译(compliation)和链接(linking)。从源代码文件到一个可执行文件的整个过程,最好的说法是 build(中文翻译的话,有叫生成,有叫编译链接,也有叫构建)。compiling 仅仅是 build 过程的一部分,但你经常会碰到许多人把 compile 指代整个过程。通常情况下,你不需要为这几个过程运行单独的命令,编译器自己会调用,如预处理器。
预处理
build 过程的第一步就是编译器运行 C 预处理器,目的是对代码文件进行文本上的处理。它会处理头文件包含指令(#include),条件编译指令(#ifdef……#endif)和宏(#define),这些指令叫做预处理指令,都以井字符 # 开头。编译器本身是绝对看不到这些预处理指令的。
比如:
#include <iostream>
这句代码会告诉预处理指令,要把 iostream 的文件内容抓去到当前文件,你每包含一个头文件,它就会把这个头文件的内容粘贴到这个文件中,然后把 #include 指令移除。
#define MY_NAME "Alex"
宏就是一个被其它内容(可能比较复杂)替换掉的字符串内容,此时预处理器会把下面的代码:
如果你不想执行变量的打印,那么只需简单注释掉 #define DEBUG 就行。
同样地,你也可以用 #ifndef 来改变条件——如果没有定义……这个方法通常用在引入多个头文件的时候。
编译
编译意味着把一个源文件(.cpp)转变成一个对象文件(object,.o 或 .obj)。
一个对象文件会把你程序里的每一个函数,封装成一个计算机处理器能理解的形式——机器指令(machine language instructions)。每一个源文件都是单独编译过的,即对象文件包含的机器代码都是编译过的源代码。比如,你有三个源文件,经过编译,生成了三个对象文件,每一个对象文件都包含了各自对应的机器代码。
但你还不能运行它们,这时候,就需要链接器了。
温馨提示:
希望这篇文章可以帮助到你,有任何问题欢迎评论或留言~
评论