本文介绍: 此时可以使用cmake中的函数存储这些源文件。只需要在CMakeLists.txt添加依赖的.cpp文件编译步骤和上面相同。有时编译程序时想添加一些编译选项,如-Wall,-std=c++11等,可以使用。此时在当前目录新增两个依赖,并mian函数执行需要依赖这两个文件。1、在官网下载cmake安装包这里下载的是v3.26。4、此时已经安装完成,可以shell使用cmake命令。2、找到下载sh文件,并使用bash执行sh脚本。对于集中的头文件,CMake提供了一个很方便的函数

目录

一、cmake安装

二、使用cmake来配合程序的编译

一、只有一个源文件的程序编译

二、同一目录下多个源文件

三、同一目录下很多源文件

四、头文件在别的文件夹

五、头文件源文件分离,并含有多个文件夹

六、生成动态库和静态库

七、链接库文件

 八、CMake其他功能

一、添加编译选项


操作系统:CentOS 7

GUN make版本:3.82

gcc版本:8.3.1

参考CMakeLists.txt基础操作

一、cmake安装

1、在官网下载cmake的安装包这里我下载的是v3.26

wget https://github.com/Kitware/CMake/releases/download/v3.26.0-rc4/cmake-3.26.0-rc4-linux-x86_64.sh

2、找到下载的sh文件,并使用bash执行sh脚本

bash cmake-3.26.0-rc4-linux-x86_64.sh 

3、然后cmake/bin/cmake软链接到/bin目录

ln -s /root/download/cmake-3.26.0-rc4-linux-x86_64/bin/cmake /bin/cmake

4、此时已经安装完成,可以shell中使用cmake命令


二、使用cmake来配合程序的编译

一、只有一个源文件程序编译

首先在当前目录创建两个文件

hello.cpp

#include <iostream>
using namespace std;

int main()
{
    cout << "Hello 今天是2023/2/26" << endl;
    return 0;
}

CMakeLists.txt (注意CMakeLists大小写,不要写错了)

cmake_minimum_required (VERSION 2.8)

project (learn_cmake)

add_executable(hello hello.cpp)

接着在当前目录执行 cmake .

[root@centOS learn_cmake]# cmake .
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


-- The C compiler identification is GNU 8.3.1
-- The CXX compiler identification is GNU 8.3.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /opt/rh/devtoolset-8/root/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /opt/rh/devtoolset-8/root/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (1.0s)
-- Generating done (0.0s)
-- Build files have been written to: /root/learn_cmake

接着会发现目录下多生成了一些文件例如Makefile

然后使用GNU make来编译程序

 此时会发现生成可执行程序,并可以正常执行


二、同一目录多个源文件

此时在当前目录新增两个依赖,并mian函数执行需要依赖这两个文件

add.cpp

add.h

需要在CMakeLists.txt中添加所依赖的.cpp文件,编译步骤和上面相同


三、同一目录下很多源文件

如果同一目录下有无穷源文件,那么一个一个添加很慢了。此时可以使用cmake中的函数存储这些源文件

aux_source_directory(dir var)

他的作用是把dir目录中的所有源文件都储存在var变量

然后需要用到源文件的地方用 变量var来取代

此时 CMakeLists.txt 可以这样优化

注意:变量的使用和Makefile不同,CMake是利用括号,如 ${index}


四、头文件在别的文件夹

对于集中的头文件,CMake提供了一个很方便的函数

include_directories ( dir )

他的作用是 自动dir目录下寻找头文件,相当于 gcc中的 gcc -I dir

此时 CMakeLists.txt 可以这样优化


五、头文件源文件分离,并含有多个文件夹

假如当前工程目录是这样的,头文件和源文件分离,并含有多个文件夹

根据上面的《三》和《四》。此时 CMakeLists.txt 可以这样优化


六、生成动态库和静态

假如当前项目目录是这样的

 此时 CMakeLists.txt 可以这样优化

解释一下:

开始编译:

  1. build目录下执行 cmake .
  2. build目录下执行 make
  3. 查看lib目录下是否生成库文件,

出现库文件就算编译成功 

        


七、链接库文件

我们已经在lib目录下生成了库文件,下面我们一个main函数来使用库文件

目录结构如下

  此时 CMakeLists.txt 可以这样写

 解释一下:


 八、CMake其他功能

一、添加编译选项

有时编译程序时想添加一些编译选项,如-Wall,-std=c++11等,可以使用add_compile_options来进行操作例如


原文地址:https://blog.csdn.net/iuu77/article/details/129229361

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_27266.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注