简单工程CmakeLists.txt的书写

本文介绍了如何在CMakeLists.txt文件中配置OpenGL、GLUT库,并集成OpenCV,包括引入相关插件、查找依赖库、设置包括路径和链接库等关键步骤。

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

工程文件夹下的CMakeLists.txt书写cmake_minimum_required(VERSION 2.8)

cmake_minimum_required(VERSION 2.8)

project(earth)//工程名字随便取
include($ENV{HOME}/usr/share/cmake/Modules/geo_sim_sdk.cmake)//装的一个关于Cmake的插件
include_geo_sim_sdk()
link_geo_sim_sdk()

add_subdirectory(src)//指定子文件名


然后工程文件夹的src文件下的CMakeLists.txt的书写如下

cmake_minimum_required(VERSION 2.8)

find_package(OpenGL)//这是找OpenGL库
if(OPENGL_FOUND)
  include_directories(${OPENGL_INCLUDE_DIR})
endif()

find_package(GLUT)//这是找GLUT库
if(GLUT_FOUND)
  include_directories(${GLUT_INCLUDE_DIR})
endif()

include_directories($ENV{OpenCV_DIR})//这是下载安装的OpenCV的目录名,在bashrc里面定义的环境变量
message("just test")
message("$ENV{OpenCV_DIR}")
include_directories(../include)

add_executable_from_dir(Candle_OBJ_Loader ./)
link_directories(/usr/local/lib)
target_link_libraries(Candle_OBJ_Loader

  //下面都是各个库的名称
  ${OPENGL_LIBRARIES}
  ${GLUT_glut_LIBRARY}

  //下面两个是动态库,运行的时候还要修改临时LD_LIBRARY_PATH变量
  opencv_core
  opencv_highgui
)

### CMake 和 Makefile 的用法及区别 #### 一、CMake 使用方法 CMake 是一种跨平台的编译系统生成器工具,能够根据特定语法书写的 `CMakeLists.txt` 文件自动生成适用于不同操作系统的本地化构建脚本。 - **初始化最低版本需求** 定义项目所需的最小 CMake 版本: ```cmake cmake_minimum_required(VERSION 3.15) ``` 这确保了所使用的功能特性能够在指定版本以上的环境中正常工作[^3]。 - **声明项目名称与默认语言标准** 通过如下语句创建一个新的工程,并设置 C++ 标准为 C++14: ```cmake project(cmaketest) set(CMAKE_CXX_STANDARD 14) ``` 此处指定了项目的命名空间以及编程语言的标准版本。 - **添加可执行目标** 最后一步是告诉 CMake 要构建哪些源文件成为最终产物的一部分: ```cmake add_executable(cmaketest main.cpp) ``` 此命令指示 CMake 将 `main.cpp` 编译链接成名为 `cmaketest` 的可执行程序。 完成上述配置之后,在终端中进入包含 `CMakeLists.txt` 文件所在的目录下新建一个子文件夹用于存放编译过程中产生的临时文件(推荐做法),接着依次输入以下指令启动整个流程: ```bash mkdir build && cd build cmake .. make ``` 第一条命令用来建立并切换到新的构建环境;第二条调用了 CMake 来解析顶层描述文档从而产出适合当前主机架构特点的一系列辅助资源;第三步则是真正意义上触发编译过程,它会读取由前者准备好的规则集进而驱动底层编译器完成实际的任务[^2]。 #### 二、传统 Makefile 方式简介 相比之下,经典的 Make 工具依赖于用户手动编辑 `.mk` 或者无扩展名形式的纯文本格式的 Makefile。这类文件内部遵循一定结构来表达各个组件之间的相互关系及其处理逻辑,比如下面是一个简单的例子: ```makefile CC=g++ CFLAGS=-std=c++14 -Wall TARGET=program all: $(TARGET) $(TARGET): main.o $(CC) $^ -o $@ clean: rm -f *.o $(TARGET) ``` 这里定义了一个非常基础的工作流:当运行 `make all` 后将会先尝试更新所有依赖项再组装成品;而清理残留物则可通过键入 `make clean` 实现[^1]。 #### 三、两者之间主要差异对比 | 对比维度 | CMake | Make | | --- | --- | --- | | 平台兼容性 | 支持多种操作系统自动适配 | 需要针对每种OS单独调整 | | 易用程度 | 更加直观易懂,抽象层次更高 | 较低级的操作接口相对复杂难学 | | 维护成本 | 自动生成大部分内容减少人为错误几率 | 手工维护容易引入不一致性问题 | 综上所述,虽然二者都能满足日常开发中的自动化构建需求,但是考虑到现代软件工程项目日益增长规模和技术栈多样性趋势来看,显然采用像 CMake 这样的高级别解决方案更加有利于团队协作效率提升和长期稳定发展[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI记忆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值