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
  • [ROS](03)CMakeLists.txt详解

    文章只是个人学习过程中学习笔记 xff0c 主要参考ROS教程1 目录 1 概述2 CMakeLists txt文件2 1 遵循的格式和顺序2 2 文件解析2 3 find package 2 4 catkin package 1 概述 C
  • ros下package中CMakelists的编写

    目录 一 package自动生成的Cmakelists1 指定cmake版本2 项目名字3 寻找构建所需依赖包4 启用python模块依赖5 Message Service Action 生成文件6 启动 message services
  • C++工程的CMakeLists.txt文件编写

    最简单的demo工程如下 xff1a include lt iostream gt include lt string gt int main int argc char argv std cout lt lt 34 hello world
  • cmake, make, CMakeLists.txt, Makefile简介

    文章目录 cmake make CMakeList txt Makefile之间的关系参考文章链接 xff1a 转自个人博客 在各种开源项目中 xff0c 经常会发现项目中除了代码源文件 xff0c 还包含了 CMakeList txt M
  • 手把手教你使用CMake自动编译中CMakeLists.txt 怎么写

    背景 CMake 一直都是用别人的开源项目来编译 Makefile都是自己写 最近看zlm源码 里面用的CMake编译 比较简洁易懂 所以有尝试给现有项目也写个CMakeList txt来使用cmake自动编译 跟它耍耍 基础语法介绍 主要
  • 关于Cmake与CmakeLists(一)--背景,须知,示例

    一 背景及须知 1 背景 xff1a VS2019与VS2010在编写程序时都是创建了一个工程 xff0c 然后直接打开 sln即可 但是vscode仅仅是一个编辑器 xff0c 打开之后只有 c或者 cpp文件 xff0c 故需要手动编译
  • CMakeLists 理解

    CMakeLists 理解 最近发现其实之前对CMakeLists 理解不是很全面 xff0c 零零散散在网上看到的一些教程 xff0c 其实都是为了解决某个命令的问题 xff0c 要不然就是对一些命令的翻译理解 xff0c 实际上是很劝退
  • Cmakelists 使用 gcc/g++

    转载 https blog csdn net afei article details 81201039 常用变量 预定义变量 PROJECT SOURCE DIR xff1a 工程的根目录 PROJECT BINARY DIR xff1a
  • 数据集txt格式划分为多个txt文件夹

    简单记录一下数据标签txt格式划分为多个文件 xff0c 通常我们标注号的标签 xff0c 都是在一个txt文件夹中 xff0c 我们训练的时候需要把txt中的标签按照一定的比例划分为多个文件 xff0c 这里贴出划分为三个文件的代码 xf
  • qt程序的CMakeLists.txt配置转为平台的qt的.pro项目工程文件

    参考这个 跨平台qt程序的CMakeLists txt配置转为平台的qt的 pro项目工程文件 谁能懂我2011的博客 CSDN博客 一些比较正规的跨平台qt项目没有 pro项目文件只有CMakeLists txt文件 xff0c 如果要编
  • CMakeLists中的add_definitions()函数

    CMakeLists中的add definitions函数 0 引言1 add definitions 2 应用 0 引言 其实这个函数在安装一些库的时候 xff0c 它的CMakeLists里面就有这样的函数 典型的就是opencv了 o
  • 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
  • python 读取txt出现\xef\xbb\xbf…的问题

    用python读取txt文件 xff0c 文件的内容是一列数如下 xff1a 1883 1886 1900 1900 1897 1897 1897 1897 1906 1917 1910 1910 但是读取的时候第一个元素为 xef xbb
  • Cmakelists.txt添加.h和.cpp文件

    文件目录结构是这样 代码都是最基本的代码 仅仅是个小的demo cmakelists txt里面的内容 span class token comment cmake的版本要求 span cmake minimum required span
  • Java解析txt文件

    Java解析txt文件 package com wb test import java io BufferedReader import java io File import java io FileInputStream import
  • Windows从命令行创建文本文件的两种方式

    第一种方式 copy con 文件名 然后可以输入文件内容 完成后打Ctrl Z退出 输入的内容被保存为一个文件 第二种 如下 echo gt 文件名 创建一个空的文件 当然你可以创建任何后缀名的文本类文件 创建一个SQL文件也是没问题的
  • 如何将 PowerShell 树输出到文本或 Excel 文件

    我有以下代码 readPath C FirstFolder writePath C SecondFolder Function Recurse folder lvl Get ChildItem Path folder File ForEac
  • 使用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

随机推荐