关于使用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
的源码,因此便下载和编译了RobWork
、RobWorkStudio
和RobWorkSim
这三个模块,然后新建项目想学习一下里边关于机器人学的算法库的时候,发现会出现如标题上的错误。一开始我没有反应过来,后来发现,这个错误的发生就是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
文件的时候注意一下语句顺序
的点,不要像我一样犯这样的低级错误。
上一篇: 计算机视觉OpenCV 5