• cmake编译c++程序


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

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

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

    #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的可执行文件,非常容易。

    注意cmake的命令不区分大小写,但一般建议使用大写的,然后,cmake的注释为#。

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

    $cmake .
    
    $make

    此时文件中,hello文件,hello文件是编译之后的输出文件。

    $./hello

    可以看到输出结果:

    Hello, world!

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

    CMakeFiles      CMakeLists.txt       main.cpp

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

    建立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!
  • 相关阅读:
    javaScript实用的一些方法
    ASP.NETCookies的用法
    SqlCommand执行带参数的sql语句
    C# Excel导出
    sql server复制表
    让Double类型完整显示,不用科学计数法显示E
    jstl fmt功能说明
    工具 PL/SQL 快捷键
    sql server 与 oracle 的不同,第一感觉。
    BigDecimal不整除的一个异常
  • 原文地址:https://www.cnblogs.com/navysummer/p/11040402.html
Copyright © 2020-2023  润新知