当前位置: 首页 > article >正文

CMake项目编译与开源项目目录结构

Cmake

        使用简单方便,可以跨平台构建项目编译环境,尤其比直接写makefile简单,可以通过简单的Cmake生成负责的Makefile文件

        如果没有使用cmake进行编译,需要如下命令:(以muduo库echo服务器为例)

g++ -o muduo_server -g muduo_server.cpp -I/usr/include -L/usr/lib -lmuduo_net -lmuduo_base -lpthread
1.-o muduo_server:输出可执行文件,名称为muduo_server;也可以生成库文件等(.a,.so)
2.-g:表示生成的可执行文件可以调试,不加则没有调试功能
3.muduo_server.cpp xxx.cpp:编译的所有cpp文件
4.-I/xxx/xxx:头文件搜索路径,/usr/include为默认搜索路径
5.-L/xxx/xxx:库文件搜索路径,/usr/lib为默认搜索路径
6.-lmuduo_net -lmuduo_base -lpthread:需要搜索的库文件名称

        使用cmake配置后:

cmake_minimum_required(VERSION 3.0)#cmake版本要求
project(main)#项目名称(不是可执行文件名称)

#配置编译选项
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g)#2 

#配置头文件搜索路径
# include_directories() #4

#配置库文件搜索路径
# link_directories()#5

#设置需要编译的源文件列表
set(SRC_LIST ./muduo_server.cpp)#3 SRC_LIST为cpp文件列表名称,cpp文件少使用

#设置可执行文件最终存储的路径,把生成的可执行文件放入bin
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

#把. 指定路径下的所有源文件名字放入变量名SRC_LIST里面
# aux_source_directory(. SRC_LIST)#3 cpp文件多使用

#表示生成可执行文件muduo_server,由SRC_LIST变量所定义的源文件编译而来
add_executable(muduo_server ${SRC_LIST})#1 muduo_server为可执行文件名称
#表示muduo_server这个目标程序需要连接的三个库文件
target_link_libraries(muduo_server muduo_net muduo_base pthread)#6

        使用cmke . 命令直接查找执行CMakeLists.txt,生成makefile,执行make即可

        完整的开源项目的目录结构:

-bin:保存生成的可执行文件
-lib:保存生成的库文件
-include:保存定义的头文件
-src:保存定义的源文件
-build:项目编译过程中产生的临时的中间文件
-example:示例/测试文件
-thirdparty:依赖的第三方库的源码文件
-CMakeLists.txt:编译文件,生成makefile
-autobuild.sh:编译脚本,执行cmake

http://www.kler.cn/a/529850.html

相关文章:

  • 一文了解DeepSeek
  • 深入剖析 HTML5 新特性:语义化标签和表单控件完全指南
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_strerror_init()函数
  • linux 函数 sem_init () 信号量、sem_destroy()
  • 好用的翻译工具
  • Java中对消息序列化和反序列化并且加入到Spring消息容器中
  • 面试常考题目——状态码总结
  • 96,【4】 buuctf web [BJDCTF2020]EzPHP
  • JavaFX - 事件处理
  • Mac上的虚拟化软件推荐
  • Go 中 defer 的机制
  • 基于开源AI智能名片2 + 1链动模式S2B2C商城小程序源码在抖音招商加盟中的应用与创新
  • web前端13--动画
  • 129.求根节点到叶节点数字之和(遍历思想)
  • 面试题:React实现鼠标托转文字绕原点旋转
  • DeepSeek是什么?横空出世意味着什么?
  • K8s介绍代理外部服务的svc几种方式
  • 力扣 215. 数组中的第K个最大元素
  • AWS EMR上的Spark日志实时搜索关键指标网页呈现的设计和实现
  • 测压表压力表计量表针头针尾检测数据集VOC+YOLO格式4862张4类别
  • 使用MATLAB进行雷达数据采集可视化
  • MySQL的覆盖索引
  • Games104——网络游戏的架构基础
  • Eigen::Tensor使用帮助
  • Qt常用控件 输入类控件
  • 文本复制兼容方案最佳实现落地。