本篇给出基于CV开发常用库的CMake配置模板,给出的CMake配置基于ubuntu20.04,开发库除Webots(Webots采用默认安装路径)外都是通过apt-get安装,详见《CV学习日志:系统安装与环境配置》。
给出的CMake工程假设了一个自定义库,即基于ROS2自编译的库,colon编译安装路径是/root/app/ros2ex/out/install。
以下是CMake模板的详细代码,尤其要注意配置了Threads和对QT5添加了特殊配置。
1 ###I.Global#################################################################### 2 cmake_minimum_required(VERSION 3.5) 3 project(acv) 4 set(CMAKE_CXX_STANDARD 14) 5 set(CMAKE_CXX_STANDARD_REQUIRED ON) 6 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/out/$<0:>) 7 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/out/$<0:>) 8 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/out/$<0:>) 9 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/header) 10 11 ###II.UNIX#################################################################### 12 if(UNIX) 13 set(THREADS_PREFER_PTHREAD_FLAG ON) 14 find_package(Threads REQUIRED) 15 message("Platform: UNIX\n\nPlatform: UNIX\n\nPlatform: UNIX\n\nPlatform: UNIX\n\nPlatform: UNIX\n\nPlatform: UNIX\n\n") 16 17 #1.Qt5 18 include_directories(/usr/include/x86_64-linux-gnu/qt5) 19 file(GLOB Qt5_LIBS /usr/lib/x86_64-linux-gnu/libQt5*.so.5) #No Qt5Bootstrap and Qt5Debug 20 add_compile_definitions(QT_WIDGETS_LIB) #Omit QT_NO_VERSION_TAGGING because of not installing Qt manually 21 add_compile_options(-fPIC) 22 23 #2.Eigen3 Gflags Glog Ceres Sophus Asio CLI11 Spdlog Cereal 24 include_directories(/usr/include) 25 include_directories(/usr/include/eigen3) 26 file(GLOB Gflags_LIBS /usr/lib/x86_64-linux-gnu/libgflags*.so) 27 file(GLOB Glog_LIBS /usr/lib/x86_64-linux-gnu/libglog*.so) 28 file(GLOB Ceres_LIBS /usr/lib/libceres*.so) 29 30 #3.OpenCV 31 include_directories(/usr/include/opencv4) 32 file(GLOB OpenCV_LIBS /usr/lib/x86_64-linux-gnu/libopencv*.so) 33 34 #4.ROS2 ROS2EX Webots 35 include_directories(/opt/ros/foxy/include /root/app/ros2ex/out/install/include) 36 include_directories(/usr/local/webots/include/controller/cpp /usr/local/webots/include/controller/c) 37 file(GLOB ROS2_LIBS LIST_DIRECTORIES false /opt/ros/foxy/lib/*.so) 38 file(GLOB ROS2EX_LIBS LIST_DIRECTORIES false /root/app/ros2ex/out/install/lib/*.so) 39 file(GLOB Webots_LIBS LIST_DIRECTORIES false /usr/local/webots/lib/controller/*.so) 40 41 #5.Octomap OpenGV 42 include_directories(/usr/include) 43 file(GLOB Octomap_LIBS /usr/lib/x86_64-linux-gnu/liboctom*.so)#octomap&octomath 44 set(Octomap_LIBS ${Octomap_LIBS} /usr/lib/x86_64-linux-gnu/liboctovis.so) 45 set(Octomap_LIBS ${Octomap_LIBS} /usr/lib/x86_64-linux-gnu/libdynamicedt3d.so) 46 47 #8.AllLibs 48 set(ALL_LIBS ${Qt5_LIBS} ${Gflags_LIBS} ${Glog_LIBS} ${Ceres_LIBS} ${OpenCV_LIBS} ${ROS2_LIBS} ${ROS2EX_LIBS} ${Webots_LIBS} ${Octomap_LIBS} ${OpenGV_LIBS}) 49 link_libraries(${ALL_LIBS}) 50 message("ALL_LIBS: ${ALL_LIBS}") 51 52 ###9.1QtSim 53 set(qtsimcpp ${CMAKE_SOURCE_DIR}/source/qtsim/qtsim.cpp) 54 add_executable(qtsim ${qtsimcpp}) 55 target_link_libraries(qtsim Threads::Threads) 56 57 ###9.2ROSSim 58 set(rossimcpp ${CMAKE_SOURCE_DIR}/source/rossim/rossim.cpp) 59 add_executable(rossim ${rossimcpp}) 60 target_link_libraries(rossim Threads::Threads) 61 62 ###9.3WbtSim 63 set(wbtsimcpp ${CMAKE_SOURCE_DIR}/source/wbtsim/wbtsim.cpp) 64 add_executable(wbtsim ${wbtsimcpp}) 65 target_link_libraries(wbtsim Threads::Threads) 66 endif(UNIX)