cmake编译c++程序

当在Linux系统下编写程序时候,若是没有相似于visual studio、vs code等IDE(集成开发环境)时,如何编译、运行程序呢?一种方法是编写makefile文件,用makefile文件管理程序脚本之间的相互依赖关系,其语法相对比较复杂。另外一种有效的方法就是利用cmake工具,自动生成makefile文件。ios

cmake是什么
CMake是一个跨平台的安装(编译)工具,能够用简单的语句来描述全部平台的安装(编译过程)。Linux/Ubuntu上基本都预先安装好了cmake工具,用sudo apt-get install也能够自动安装。要使用cmake必须在工程的每一个文件夹中都编写CMakeLists.txt,尤为注意C、M、L是大写,而且是复数形式。工具

hello, world!
话很少说,下面给出利用cmake进行编译并运行程序的例子,首先在创建一个名为ex1的文件夹,在其中创建程序源文件main.cpp和CMakeLists.txtui

#main.cpp
#include <iostream>
 
int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
#CMakeLists.txt
PROJECT(hello_world)
ADD_EXECUTABLE(hello main.cpp)

解释下上面的CMakeLists.txt,第一句是指生成一个名为hello_world的工程;第二句为基于main.cpp生成名为hello的可执行文件,很是容易。spa

注意cmake的命令不区分大小写,但通常建议使用大写的,而后,cmake的注释为#。code

在terminal中,将路径改成当前文件夹中,前后运行blog

$cmake .

$make

此时文件中,hello文件,hello文件是编译以后的输出文件。开发

$./hello

能够看到输出结果:terminal

Hello, world!

out-of-source编译
上述编译方法有个很大的问题,本来文件中仅有源文件和CMakeLists.txt,可是编译以后,文件夹中的文件以下所示:
CMakeCache.txt  cmake_install.cmake  hello     Makefileget

CMakeFiles      CMakeLists.txt       main.cppio

多了不少编译过程文件和结果文件,这样的方式显然是不方便的。若是可以把编译的过程文件和结果文件放在另外一个文件夹,那么文件结构就比较清晰,能够方便地编辑、修改源文件。

创建ex2文件夹,而且在ex2中创建src文件夹,和build文件夹。

首先,在ex2文件夹中,创建CMakeLists.txt,第一行是创建名为hello_world的工程,第二行添加src子文件夹

#CMakeLists.txt
PROJECT(hello_world)
ADD_SUBDIRECTORY(src)

而后,进入src文件夹,创建CMakeLists.txt,基于main.cpp生成名为hello的目标文件。

ADD_EXECUTABLE(hello main.cpp)

一样,main.cpp与上面相同

#main.cpp
#include <iostream>
 
int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}

而后,进入ex2/build文件夹,在terminal中

$cmake ..
$make

对程序进行编译,编译完成后,在build文件夹中生成了编译文件和src文件,src文件夹中有hello的结果文件,进入src文件夹中,在terminal中

$./hello

能够看到输出结果,说明编译正确

Hello, world!
相关文章
相关标签/搜索