欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于使用CMake构建C++项目时出现Missing variable is: CMAKE_FIND_LIBRARY_SUFFIXES错误的解决方法

程序员文章站 2024-03-25 11:07:34
...

  有一段时间没有更新自己的技术博客了,但是最近看到有更多的人关注了我的技术博客,也给了我继续更新博客的动力。最近几个月在忙一些杂七杂八的事情,现在终于有了更多的时间来更新自己的博客了。好了,废话少说,下面我们进入今天的正题。

  众所周知,在21世纪20年代的今天,开源的热潮席卷而来。机器人领域相关的开源框架和库众多,可选的方案也让人应接不暇,比如最有知名度的ROS/ROS2,此外还有:

  • V-REP
  • Webots
  • Gazebo
  • KDL
  • Track_IK
  • kindr
  • Drake
  • DART
  • OpenRave
  • RBDL
  • Robotics Library
  • pinocchio
  • RobWork

  最近我想系统研究一下RobWork的源码,因此便下载和编译了RobWorkRobWorkStudioRobWorkSim这三个模块,然后新建项目想学习一下里边关于机器人学的算法库的时候,发现会出现如标题上的错误。一开始我没有反应过来,后来发现,这个错误的发生就是project()find_package()语句出现的先后次序不对导致了,正常来讲,任何查找和包含第三方库的语句都必须放在project()语句之后,而set()设置环境变量的语句可以放在project()之前的,不信你新建一个项目,调整一下相关的语句顺序试一试。

下面的写法会出现如标题的错误:

cmake_minimum_required(VERSION 2.8)
set(RobWork_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../RobWork/cmake)
set(CMAKE_BUILD_TYPE Release)
find_package(RobWork REQUIRED)
project(demo01)
include_directories(${ROBWORK_INCLUDE_DIRS})
link_directories(${ROBWORK_LIBRARY_DIRS})
add_executable(${PROJECT_NAME} "main.cpp")
target_link_libraries(${PROJECT_NAME} ${ROBWORK_LIBRARIES})

错误内容如下:

Missing variable is:
CMAKE_FIND_LIBRARY_PREFIXES
CMake Error: Error required internal CMake variable not set, cmake may not be built correctly.

而正确的操作方式可以是这样:

cmake_minimum_required(VERSION 2.8)
project(demo01)
set(RobWork_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../RobWork/cmake)
set(CMAKE_BUILD_TYPE Release)
find_package(RobWork REQUIRED)
include_directories(${ROBWORK_INCLUDE_DIRS})
link_directories(${ROBWORK_LIBRARY_DIRS})
add_executable(${PROJECT_NAME} "main.cpp")
target_link_libraries(${PROJECT_NAME} ${ROBWORK_LIBRARIES})

或者这样:

cmake_minimum_required(VERSION 2.8)
set(RobWork_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../RobWork/cmake)
set(CMAKE_BUILD_TYPE Release)
project(demo01)
find_package(RobWork REQUIRED)
include_directories(${ROBWORK_INCLUDE_DIRS})
link_directories(${ROBWORK_LIBRARY_DIRS})
add_executable(${PROJECT_NAME} "main.cpp")
target_link_libraries(${PROJECT_NAME} ${ROBWORK_LIBRARIES})

总结,这篇博客没啥技术含量,只是讲了一个希望大家在写CMakeLists.txt文件的时候注意一下语句顺序的点,不要像我一样犯这样的低级错误。

相关标签: Robot