CMake基本使用

在github上面的一个项目使用CMake编译,CMake是一个比较复杂的编译方式,所以这里只总结可能使用到的指令。

1、一个基本的框架

一个使用频繁的CMakeLists.txt的内容为:

# 指定最小CMake版本
cmake_minimum_required(VERSION 3.10)
# 项目名称
project(yolov5)
# 添加宏定义:使用c++11标准
add_definitions(-std=c++11)
add_definitions(-DAPI_EXPORTS)

# CMAKE_CXX_STANDARD是内置变量,用于设定c++版本
set(CMAKE_CXX_STANDARD 11)
# CMAKE_BUILD_TYPE是内置变量,用于设定编译模式
set(CMAKE_BUILD_TYPE Debug)

add_executable(main main.cpp) 

2、使用编译好的库

比如在使用cuda编程时,会使用到cuda提供的库文件,则在CMakeLists.txt中定义为:

# 同时指定头文件和库文件的搜索路径,全局共享
include_directories(/usr/local/cuda/include)
link_directories(/usr/local/cuda/lib64)

add_executable(main main.cpp)
# 会在上面所有指定的库文件和头文件路径中搜索cudart
# 并将cudart库链接给main
target_link_libraries(main cudart)

3、使用自定义的cpp和hpp

同样的,这种也要指定头文件和源码的搜索路径。可以发现其实库就是编译好的源码,所以两者在CMakeLists.txt中的定义大致一样

# 指定头文件搜索路径,和2节中的库一致
include_directories(${PROJECT_SOURCE_DIR}/src/)

# 指定搜索源码的路径,GLOB_RECURSE指定了全局匹配符递归搜索
file(GLOB_RECURSE SRCS ${PROJECT_SOURCE_DIR}/src/*.cpp ${PROJECT_SOURCE_DIR}/src/*.cu)

# 将源码和main一起编译(最终源码还是变成了库)并自动形成链接
add_executable(main main.cpp ${SRCS}) 

4、总结

实际上,不管是库还是源码,都需要指定头文件搜索路径和源码搜索路径(或者库路径),并链接到main。

编译时主要分为两个阶段:编译源码和链接

  • 对于库文件的使用,先add_executable将main源码编译,然后通过target_link_libraries将现成的库文件链接到main
  • 对于自定义cpp源码,add_executable同时将main源码和自定义源码编译,然后自动形成链接。

相关推荐

  1. CMake基本使用

    2024-02-10 20:36:02       33 阅读
  2. cmake命令使用总结

    2024-02-10 20:36:02       14 阅读
  3. Cmake基础(2)

    2024-02-10 20:36:02       32 阅读
  4. Cmake基础(6)

    2024-02-10 20:36:02       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-10 20:36:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-10 20:36:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-10 20:36:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-10 20:36:02       20 阅读

热门阅读

  1. 【24.2.4笔记】C++ Primer自学 Day21

    2024-02-10 20:36:02       32 阅读
  2. Ubuntu in VMware的问题

    2024-02-10 20:36:02       27 阅读
  3. Spring Boot配置文件优先级

    2024-02-10 20:36:02       27 阅读
  4. 人类智能远远超越了物理与数理范畴

    2024-02-10 20:36:02       30 阅读
  5. 【机器学习笔记】贝叶斯学习

    2024-02-10 20:36:02       25 阅读
  6. 264. 丑数 II

    2024-02-10 20:36:02       32 阅读
  7. 某magnet搜索接口

    2024-02-10 20:36:02       28 阅读
  8. 5. 最长回文子串

    2024-02-10 20:36:02       33 阅读
  9. Vue 前置导航

    2024-02-10 20:36:02       25 阅读
  10. C#系列-访问SqlServer+Mysql+Oracle数据库(6)

    2024-02-10 20:36:02       30 阅读