Linux下C++文件的g++和cmake编译方式使用介绍
虽然现在在编写C++工程时有各类IDE可供选择,但通过这篇文章,希望能够更深入地理解各类IDE在编译C++代码时的底层原理。
首先新建一个简单的源文件Hello.cpp进行后续测试
#incldue<iostream>
using namespace std;
int main(int argc, char **argv){
cout << "Hello" <<endl;
return 0;
}
1.g++编译
终端输入:
g++ Hello.cpp
若出现"command not found"的报错,说明可能还未安装g++,则可以使用如下命令安装g++:
sudo apt-get install g++
若执行顺利,这条命令应该没有任何输出,但在当前目录下会出现一个a.out文件,并且该文件具有执行权限,此时在终端中输入./a.out即可运行此程序。
$ ./a.out
Hello
这里需要说明的是,为了有最直观的感受,以上例子使用了大量的默认参数,几乎省略了所有中间参数。g++默认把源文件编译成a.out文件(也可以自己指定可执行文件的名称)。
2.cmake编译
cmake编译是现在在工程中广泛使用的编译方式。在一个cmake工程中,我们会使用cmake命令生成一个makefile文件,然后,用make命令根据这个makefile文件的内容来编译整个工程。
首先,我们需要在目录下新建一个CMakeLists.txt文件,内容如下:
#声明要求的cmake最低版本
cmake_minimum_required(VERSION 2.8)
#声明一个cmake工程
project(Hello)
#添加一个可执行程序
#语法:add_executable(程序名 源代码文件)
add_executable(hello Hello.cpp)
CMakeLists.txt文件的作用是告诉cmake要对这个目录下的文件做哪些操作。其格式需要遵循cmake的语法。然后就可以调用cmake对该工程进行cmake编译:
终端输入:
cmake .
cmake后的一个点表示在当前目录下进行cmake
cmake编译成功后就可以在目录下找到一个可执行文件Hello,执行该文件即可得到源文件输出:
终端输入:
$ ./Hello
Hello
但同时也会发现,cmake编译后会产生大量的中间文件,我们不希望自己代码发布出去后带有这么多中间文件。所以在编译工程的时候,我们通常创建一个build文件夹专门用来存放编译过程中产生的中间文件,在代码发布时可以将build文件夹删除。
利用build文件夹保存中间文件进行编译的过程如下:
终端输入:
mkdir build
cd build
cmake ..
make
后续操作与上面相同。