CMakeLists常用写法

本文介绍了CMakeLists.txt的基本结构,包括添加头文件目录、链接库和宏的使用。详细讲解了如何添加系统库如OpenCV,以及自定义库的编译与链接。同时,探讨了如何在宏定义中处理不同实现,如CPU和GPU的选择,通过cmake参数灵活控制编译选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本结构

cmake_minimum_required(VERSION 3.0)
project(DEMO) 
add_executable(run main.cpp)  

添加头文件目录

目录结构:

+root
	+build
    +lib
	+heads
		-func.hpp
	+src
		-func.cpp
	-main.cpp
	-CMakeLists.txt

下文所有的cmake操作都默认在build目录下执行

main.cpp中调用func中的函数。CMakeLists中需要加入头文件的查找目录,

cmake_minimum_required(VERSION 3.0)
project(DEMO)

include_directories(./heads)

add_executable(run main.cpp src/demo.cpp)

添加链接库

  • 添加系统中的库

    如添加OpenCV库

cmake_minimum_required(VERSION 3.0)
project(DEMO)  

# find_package命令会自动在系统默认lib路径下寻找所需库。
# 若该库不在系统默认路径下,或者要自定义路径,需要set一下路径
# set(OpenCV_DIR /you/path/to/OpenCVConfig.cmake)
find_package(OpenCV REQUIRED)  

add_executable(run main.cpp) 

target_link_libraries(run ${OpenCV_LIBS})  
  • 添加自定义库

    比如先把func代码编译成动态链接库,再在main.cpp中调用

cmake_minimum_required(VERSION 3.0)
project(DEMO)

# 可以指定.so文件的输出目录;否则默认为执行make操作的目录
# 注意这里的path是相对与执行cmake操作的目录
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../lib)

include_directories(./heads)

add_library(func SHARED src/demo.cpp)

这样就会在lib目录下编译出 libfunc.so. main.cpp调用时的CMakeLists:

cmake_minimum_required(VERSION 3.0)
project(DEMO)

include_directories(./heads)
link_directories(./lib)

add_executable(run main.cpp)

target_link_libraries(run func)

添加宏

比如nms算法,有cpu和gpu两种实现:

#pragma once
#include "cpu/nms.h"

#ifdef WITH_CUDA
#include "cuda/nms.h"
#endif

WITH_CUDA如何在编译的时候添加进去呢?

可以直接在CMakeLists中添加 add_definitions(-DWITH_CUDA)

或者更灵活的通过cmake 参数来实现

option(WITH_CUDA "select to use cuda or not" ON) 
if(WITH_CUDA)
	add_definitions(-DWITH_CUDA)
	... #其它编译命令
else()
    ... #其它编译命令
endif()

add_executable(...)

cmake -DWITH_CUDA=OFF ..可以指定ON或OFF。

在检查 CMakeLists.txt 文件的代码风格时,可以使用一些专门的工具来帮助完成这一任务。这些工具可以帮助开发者发现潜在的错误、不符合最佳实践的写法以及不一致的代码风格问题。以下是一些常用的工具和方法: ### 使用 `cmake-lint` `cmake-lint` 是一个用于检查 CMakeLists.txt 文件风格的工具,它类似于 Python 中的 `pylint`。它能够检测出不符合 CMake 编码规范的地方,并提供相应的建议。 #### 安装 `cmake-lint` 可以通过 Python 的 `pip` 安装 `cmake-lint`: ```bash pip install cmake-lint ``` #### 使用 `cmake-lint` 安装完成后,可以直接在包含 CMakeLists.txt 文件的目录中运行以下命令: ```bash cmake-lint CMakeLists.txt ``` 该命令会输出所有发现的风格问题及其位置,帮助开发者进行修正。 ### 使用 `cmake-format` `cmake-format` 是一个用于格式化 CMakeLists.txt 文件的工具,它可以自动调整代码格式以符合一定的风格指南。这对于统一团队内部的代码风格非常有用。 #### 安装 `cmake-format` 同样,`cmake-format` 也可以通过 `pip` 安装: ```bash pip install cmake-format ``` #### 使用 `cmake-format` 运行以下命令来格式化 CMakeLists.txt 文件: ```bash cmake-format -i CMakeLists.txt ``` 此命令会直接修改原文件,将其格式化为符合默认或自定义配置的风格。 ### 集成到 IDE 或编辑器 许多现代的 IDE 和文本编辑器(如 VSCode、CLion)支持通过插件或扩展集成上述工具。例如,在 VSCode 中,可以通过安装 CMake Tools 插件来获得更好的 CMake 支持,包括代码风格检查和格式化功能。 ### 自定义规则 对于 `cmake-lint` 和 `cmake-format`,用户还可以通过配置文件来自定义规则。这允许团队根据自己的需求定义特定的编码标准,从而确保所有成员遵循一致的代码风格。 ### 持续集成(CI)集成 为了确保每次提交的代码都符合预定的风格指南,可以将这些工具集成到持续集成流程中。例如,在 GitHub Actions 或 GitLab CI 中添加一个步骤来运行 `cmake-lint` 或 `cmake-format`,并在构建失败时通知开发者。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值