一个简单标准的CMakeLists.txt文件

本文详细介绍了一个完整的CMakeLists.txt文件配置流程,包括设置CMake版本、项目名称、编译类型、C++11标准支持、输出目录、库文件添加、头文件路径指定及链接库设置等内容,并给出了如何引入第三方库如OpenCV的具体步骤。
cmake_minimum_required( VERSION 2.8 )#cmake版本最低要求
project(KMeans)#项目名称

IF(NOT CMAKE_BUILD_TYPE)#(可选)如果没有指定cmake编译模式,就选择Release模式,必须写成三行
SET(CMAKE_BUILD_TYPE Release)
ENDIF()

set( CMAKE_CXX_FLAGS "-std=c++11" )# 添加c++ 11标准支持
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)##设置生成的so动态库最后输出的路径
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})#将产生的target文件输出到指定路径

add_library(${PROJECT_NAME} SHARED k-means.cpp)##将指定的源文件生成链接文件,然后添加到工程中去

include_directories(${PROJECT_SOURCE_DIR} )#添加头文件目录,相当于指定gcc的-I参数

link_directories($(DIR)/lib) #动态链接库或静态链接库的搜索路径,相当于gcc的-L参数


add_executable(main  main.cpp)#生成可执行文件
target_link_libraries(main ${PROJECT_NAME})#将目标文件与库文件进行链接,添加链接库,相同于指定-l参数

如果添加OpenCV,OpenNI,PCL等库刚需要添加以下
set(OpenCV_DIR "/home/xx/release")#指定使用哪种版本的OpenCV,必须在project前,release是openCV编译的文件夹

LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)#自己的cmake模块所在的路径,或者include( cmake 模块的绝对路径+名称)
find_package(<name1>)#find_package(<Name>)命令首先会在模块路径中寻找 Find<name>.cmake
find_package (<name2>)
...
include_directories(<name_INCLUDE_DIRS>)##添加相关库的头文件路径

target_link_libraries(${PROJECT_NAME} $(name1_LIBS) ...)  #将目标文件与库文件进行链接


OK,这样一个完整的CMakeLists.txt就完成了,可以开始自己的编译了

### 如何修复损坏的 `CMakeLists.txt` 文件 当遇到 `CMakeLists.txt` 文件损坏的情况时,可以采取一系列措施来尝试恢复其正常状态并确保编译过程顺利进行。 #### 1. 备份现有文件 在任何修改之前,建议先备份当前的 `CMakeLists.txt` 文件。这可以通过简单的复制命令完成: ```bash cp CMakeLists.txt CMakeLists.txt.bak ``` #### 2. 验证语法错误 使用 `cmake` 工具自带的功能验证 `CMakeLists.txt` 中是否存在明显的语法错误。可以在终端中运行如下命令: ```bash cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON . ``` 此操作会生成详细的编译信息,并指出可能存在的问题所在位置[^2]。 #### 3. 对照标准模板修正 如果上述方法未能解决问题,则可以根据 ROS 官方文档中的指导重新构建一份完整的 `CMakeLists.txt` 文件。对于一个典型的 Catkin 包来说,该文件应至少包含以下几个部分: - 设置最低版本要求: ```cmake cmake_minimum_required(VERSION 3.0.2) ``` - 指定包名称: ```cmake project(package_name) ``` - 查找依赖项(例如 roscpp 或 rospy): ```cmake find_package(catkin REQUIRED COMPONENTS roscpp std_msgs message_generation ) ``` - 添加消息和服务定义(如果有): ```cmake add_message_files( FILES Message1.msg Message2.msg ) generate_messages( DEPENDENCIES std_msgs ) ``` - 导入库和可执行文件配置: ```cmake catkin_package( CATKIN_DEPENDS message_runtime ... ) include_directories( ${catkin_INCLUDE_DIRS} ) add_executable(node_name src/node.cpp) target_link_libraries(node_name ${catkin_LIBRARIES} ) ``` 以上代码片段展示了创建一个基本的ROS节点所需的最小化设置[^1]。 #### 4. 清理工作区重试 有时旧有的缓存可能会干扰新的更改生效,在这种情况下应该清理整个Catkin工作空间后再尝试编译: ```bash cd ~/catkin_ws/ rm -rf build devel catkin_make source devel/setup.bash ``` 通过这些步骤通常能够有效地处理大多数由 `CMakeLists.txt` 引起的问题。不过需要注意的是具体情况还需具体分析,必要时查阅官方手册获取更详尽的帮助[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值