CMakeLists.txt书写规则记录

2023-05-16

编写自己的CMakeLists.txt

    • 1. 一个CMakeLists.txt的基本内容
    • 2. 项目包含多个文件或文件夹时添加方式
    • 3. 添加链接库

1. 一个CMakeLists.txt的基本内容

# 编译本项目的cmake的版本要求
cmake_minimum_required(VERSION 3.3.0)

# 项目名称,自己设
project(<projectName>)

# cmake编译时是以Debug还是Release形式编译
set(CMAKE_BUILD_TYPE Release)

# 设置要求的c++标准,cmake v3.1及以上版本支持这种方式
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 如果是低版本的cmake,需要以下面这种方式设定:
# include(CheckCXXCompilerFlag)
# CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
# 设置c++标准这一部分想要具体了解的话可以参考[这篇博客](https://blog.csdn.net/zhizhengguan/article/details/124690878)

# 设置可执行文件输出路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
# 设置库文件的输出路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 以上两变量在新版本中已被`CMAKE_RUNTIME_OUTPUT_DIRECTORY`和`CMAKE_ARCHIVE_OUTPUT_DIRECTORY`代替  

# 提供搜索头文件的路径,根据自己项目设定包含头文件的路径
include_directories(${CMAKE_SOURCE_DIR}/include)

#生成可执行文件目标,这里用主目录下的main.cpp演示,项目中的其他文件添加也同理,后面会展示一种更方便的方式
add_executable(<name> ${CMAKE_SOURCE_DIR}/main.cpp)

# 为目标链接到对应的库,target是add_executable生成的目标,即需要与其同名
# item是要链接的库文件的名称,后面通过示例展示
# 注意:target_link_libraries必须在add_executable之后
target_link_libraries( <target> 
	[item1]
	[item2]
	...
)

2. 项目包含多个文件或文件夹时添加方式

通常一个项目会有很多个cpp文件,或者多个文件夹,每个文件夹下有多个文件便于代码管理,这时候总不能去手敲每个文件的路径到add_executable()里面去。

(网上很多教程就只拿只有一个main.cpp的举例,你家项目只有一个main文件啊?)

例如项目下还包含一个文件夹Part1,里面有很多cpp文件,这时候可以通过FILE生成一个这些文件的总目录,然后直接加到add_executable()即可
方式如下:

FILE(GLOB_RECURSE part1_files "${CMAKE_SOURCE_DIR}/Part1/src/*.cpp")
# 其中GLOB_RECURSE参数是用于递归搜索目标文件夹下的所有文件以及子文件夹
# part1_files 是自己设定的名称
# 第三个参数是自己的文件路径

生成总目录后,再在add_executable()进行添加即可:

add_executable(<name> ${CMAKE_SOURCE_DIR}/main.cpp ${part1_files})

项目文件结构示例

.
├── bin
├── build
├── include
├── Part1
│   ├── include
│   └── src
│       ├── a.cpp
│       ├── b.cpp
│       └── ...
├── lib
├── main.cpp
├── opencv
│   ├── include
│   │   ├── opencv
│   │   └── opencv2
│   └── lib
│       ├── libopencv_world.so
│       ├── libopencv_world.so.3.4
│       └── libopencv_world.so.3.4.16
└── CMakeLists.txt

3. 添加链接库

当项目下有要使用的库时,这里以linux下的opencv动态链接库文件举例

# 设定路径变量,方便书写
set(myOpenCV_Path ${CMAKE_SOURCE_DIR}/opencv)
# 添加头文件,同第一部分的说明
include_directories(${myOpenCV_Path}/include)
# 设定.so文件的路径变量
set(OpenCV_LIBS ${myOpenCV_Path}/lib/libopencv_world.so)


# 设定完路径变量后,再在target_link_libraries中添加即可
target_link_libraries( <target> 
	${OpenCV_LIBS}
	...
)

本文只记录了最基础的所需项,有了这些一般简单的项目都能够正常编译运行了,CMakeLists.txt当然还有更多更灵活高级的写法和东西,例如install之类的,根据项目需求自行添加,后续学习到了再进行记录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMakeLists.txt书写规则记录 的相关文章

  • cmake中多级CMakeLists.txt调用

    文章目录 一 工程目录结构二 工程源代码2 1 上层目录2 1 1 cmaketest CMakeLists txt2 1 2 cmaketest main cpp2 1 3 cmaketest inc func1 hpp2 1 4 cma
  • Cmake知识----编写CMakeLists.txt文件编译C/C++程序

    CMake是一种跨平台编译工具 xff0c 比make更为高级 xff0c 使用起来要方便得多 CMake主要是编写CMakeLists txt文件 xff0c 然后用cmake命令将CMakeLists txt文件转化为make所需要的m
  • cmake, make, CMakeLists.txt, Makefile简介

    文章目录 cmake make CMakeList txt Makefile之间的关系参考文章链接 xff1a 转自个人博客 在各种开源项目中 xff0c 经常会发现项目中除了代码源文件 xff0c 还包含了 CMakeList txt M
  • CMakeList.txt/Clion中添加头文件和库

    cmake minimum required VERSION 3 6 project capi lua include directories usr include find library LUALIB lua usr lib set
  • Matlab 读取txt文本中的数据

    使用matlab读取txt文本中的数据 数据最好有一定的规律 我们可以使用函数importdata来导入数据 下面使用一个例子来说明该函数的使用 start path C 设置默认文件夹 filename pathname uigetfil
  • 数据处理:Excel读取txt文本

    数据处理 xff08 一 xff09 xff1a Excel读取txt文本 1 1 任务需求 txt 文本为四列数据 xff0c 以空格为分隔符号 xff0c 现导入 Excel 中 1 2 实现步骤 新建 excel 文件点击 数据 来自
  • cmake之CMakelist.txt的使用

    文章目录 常用命令1 指定 cmake 的最小版本2 打印信息2 1 打印普通信息2 2 打印告警2 3 打印错误 3 项目名称4 设置变量5 查找指定的库文件6 设置包含的目录7 设置链接库搜索目录8 指定编译包含的源文件8 1 明确指定
  • python open按行读取txt 去掉\n

    加 strip 39 n 39
  • signature=8544f8b053d71af57dc8d660a85d9730,VIPqiangjian.txt

    E03E57EB8BBCA651CA328471425F6AD0E00BA528AC66F8D93F965C7D2D23A3B430533B0D8637A1FC156333BAEC82986AEFA71FF8B13664AD40742674
  • ORB_SLAM2 CMakeLIsts文件注释

    最近在学习ORB SLAM 发现基本找不到CMakeLists的代码注释 就决定自己注释一份 如果发现有问题的地方 欢迎和我交流 span class token function cmake minimum required span s
  • Python:把列表内容按行数写入txt

    事情的起因是我需要把一个元素全为数字的列表按固定列数写入txt文件 xff0c 也就是每行几个元素 xff0c 用逗号隔开 看了一些网上的分享觉得都不太合适 xff0c 于是自己想了一个办法 xff0c 一行代码解决 xff0c 废话少说
  • QT中CMakeLists添加第三方库

    1 新建项目 xff0c 打开CMakeLists txt文件 cmake minimum required VERSION 2 8 project fp test cm 括号内fp test cm为项目名称 add executable
  • CMakeLists.txt中FIND_PACKAGE()是如何工作的?

    官方文档 xff1a https cmake org cmake help latest command find package html FIND PACKAGE lt PackageName gt 如何查找头文件和库文件路径 xff1
  • ROS2 + Qt5 cmake的CMakeLists.txt文件配置

    ROS2 QT实现学习笔记 1 1 功能包的创建和编译 ROS2 Foxy 43 Qt5 on Linux Platform 按上面两个文章配置后的目录结构 build CMakeLists txt include mainwindow h
  • NDK--CMakeLists配置第三方so库

    当我们创建一个NDK工程时 xff0c 会自动创建一个CMakeLists txt的文件 xff0c 在AS中c 43 43 的编译器是使用LLVM xff0c 规则为cmake xff0c 今天来学习下cmake的基本套路 首先 xff0
  • CMake与CMakeLists是干什么的?

    写在最前面 xff1a 所有的博文都是为了若干年月以后当我再次翻看可以快速回想起之前的零星知识 学海无涯 xff0c 在看这篇文章的未来的你 xff0c 加油吧 xff01 因为之前看到有些软件中使用了CMake xff0c 不太理解为什么
  • CMakeList实战

    1 FIND PACKAGE FIND PACKAGE
  • Windows从命令行创建文本文件的两种方式

    第一种方式 copy con 文件名 然后可以输入文件内容 完成后打Ctrl Z退出 输入的内容被保存为一个文件 第二种 如下 echo gt 文件名 创建一个空的文件 当然你可以创建任何后缀名的文本类文件 创建一个SQL文件也是没问题的
  • 如何在python中修改Yolo .txt文件的值

    我想修改包含 txt 文件的文件夹 txt 文件如下所示 3 0 695312 0 523958 0 068750 0 052083 3 0 846875 0 757292 0 071875 0 031250 3 0 830469 0 71
  • 使用powershell从txt文件中提取带有两个分隔符的列

    我有一个sample txt 文件 Processing Cl Cog u l Cg txt V DM Nv AL Ft He Se Fe Bt L Ey 0 Ct Cu3 我需要将此文件分成 4 个不同的列 并在之前添加新列 输出 csv

随机推荐