zoukankan      html  css  js  c++  java
  • cmake 使用

    # Copyright 2016 The Cartographer Authors
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    cmake_minimum_required(VERSION 2.8.12)  # Ships with Ubuntu 14.04 (Trusty)
    
    project(cartographer_ros)
    
    set(PACKAGE_DEPENDENCIES
      cartographer_ros_msgs
      eigen_conversions
      geometry_msgs
      message_runtime
      nav_msgs
      pcl_conversions
      rosbag
      roscpp
      roslib
      sensor_msgs
      std_msgs
      tf2
      tf2_eigen
      tf2_ros
      urdf
      visualization_msgs
    )
    
    find_package(cartographer REQUIRED)
    include("${CARTOGRAPHER_CMAKE_DIR}/functions.cmake")
    set(BUILD_SHARED_LIBS OFF)
    option(BUILD_GRPC "build features that require Cartographer gRPC support" false)
    google_initialize_cartographer_project()
    google_enable_testing()
    
    find_package(catkin REQUIRED COMPONENTS ${PACKAGE_DEPENDENCIES})
    
    include(FindPkgConfig)
    
    find_package(LuaGoogle REQUIRED)
    find_package(PCL REQUIRED COMPONENTS common)
    find_package(Eigen3 REQUIRED)
    find_package(Boost REQUIRED COMPONENTS system iostreams)
    
    find_package(urdfdom_headers REQUIRED)
    if(DEFINED urdfdom_headers_VERSION)
      if(${urdfdom_headers_VERSION} GREATER 0.4.1)
        add_definitions(-DURDFDOM_HEADERS_HAS_SHARED_PTR_DEFS)
      endif()
    endif()
    
    include_directories(
      ${urdfdom_headers_INCLUDE_DIRS}
    )
    
    # Override Catkin's GTest configuration to use GMock.
    set(GTEST_FOUND TRUE)
    set(GTEST_INCLUDE_DIRS ${GMOCK_INCLUDE_DIRS})
    set(GTEST_LIBRARIES ${GMOCK_LIBRARIES})
    
    catkin_package(
      CATKIN_DEPENDS
        ${PACKAGE_DEPENDENCIES}
      DEPENDS
        # TODO(damonkohler): This should be here but causes Catkin to abort because
        # protobuf specifies a library '-lpthread' instead of just 'pthread'.
        # CARTOGRAPHER
        PCL
        EIGEN3
        Boost
        urdfdom_headers
      INCLUDE_DIRS "."
      LIBRARIES ${PROJECT_NAME}
    )
    
    file(GLOB_RECURSE ALL_SRCS "*.cc" "*.h")
    file(GLOB_RECURSE ALL_TESTS "*_test.cc")
    file(GLOB_RECURSE ALL_EXECUTABLES "*_main.cc")
    file(GLOB_RECURSE ALL_GRPC_FILES "cartographer_ros/cartographer_grpc/*")
    list(REMOVE_ITEM ALL_SRCS ${ALL_TESTS})
    list(REMOVE_ITEM ALL_SRCS ${ALL_EXECUTABLES})
    if (NOT ${BUILD_GRPC})
      list(REMOVE_ITEM ALL_SRCS ${ALL_GRPC_FILES})
      list(REMOVE_ITEM ALL_TESTS ${ALL_GRPC_FILES})
      list(REMOVE_ITEM ALL_EXECUTABLES ${ALL_GRPC_FILES})
    endif()
    add_library(${PROJECT_NAME} ${ALL_SRCS})
    add_subdirectory("cartographer_ros")
    
    target_link_libraries(${PROJECT_NAME} PUBLIC cartographer)
    
    # Lua
    target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${LUA_INCLUDE_DIR})
    
    # PCL
    target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${PCL_INCLUDE_DIRS})
    target_link_libraries(${PROJECT_NAME} PUBLIC ${PCL_LIBRARIES})
    set(BLACKLISTED_PCL_DEFINITIONS " -march=native -msse4.2 -mfpmath=sse ")
    foreach(DEFINITION ${PCL_DEFINITIONS})
      list (FIND BLACKLISTED_PCL_DEFINITIONS "${DEFINITION}" DEFINITIONS_INDEX)
      if (${DEFINITIONS_INDEX} GREATER -1)
        continue()
      endif()
      set(TARGET_COMPILE_FLAGS "${TARGET_COMPILE_FLAGS} ${DEFINITION}")
    endforeach()
    
    # Eigen
    target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC
      "${EIGEN3_INCLUDE_DIR}")
    
    # Boost
    target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC
      "${Boost_INCLUDE_DIRS}")
    target_link_libraries(${PROJECT_NAME} PUBLIC ${Boost_LIBRARIES})
    
    # Catkin
    target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${catkin_INCLUDE_DIRS})
    target_link_libraries(${PROJECT_NAME} PUBLIC ${catkin_LIBRARIES})
    add_dependencies(${PROJECT_NAME} ${catkin_EXPORTED_TARGETS})
    
    # Add the binary directory first, so that port.h is included after it has
    # been generated.
    target_include_directories(${PROJECT_NAME} PUBLIC
        $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
        $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
        $<INSTALL_INTERFACE:include>
    )
    
    set(TARGET_COMPILE_FLAGS "${TARGET_COMPILE_FLAGS} ${GOOG_CXX_FLAGS}")
    set_target_properties(${PROJECT_NAME} PROPERTIES
      COMPILE_FLAGS ${TARGET_COMPILE_FLAGS})
    
    if (CATKIN_ENABLE_TESTING)
      foreach(TEST_SOURCE_FILENAME ${ALL_TESTS})
        get_filename_component(TEST_NAME ${TEST_SOURCE_FILENAME} NAME_WE)
        catkin_add_gtest(${TEST_NAME} ${TEST_SOURCE_FILENAME})
        # catkin_add_gtest uses a plain (i.e. no PUBLIC/PRIVATE/INTERFACE) call to
        # target_link_libraries. That forces us to do the same.
        target_include_directories(${TEST_NAME} SYSTEM PUBLIC ${LUA_INCLUDE_DIR})
        target_link_libraries(${TEST_NAME} ${LUA_LIBRARIES})
        target_include_directories(${TEST_NAME} SYSTEM PUBLIC ${catkin_INCLUDE_DIRS})
        target_link_libraries(${TEST_NAME} ${catkin_LIBRARIES})
        add_dependencies(${TEST_NAME} ${catkin_EXPORTED_TARGETS})
        target_link_libraries(${TEST_NAME} cartographer)
        target_link_libraries(${TEST_NAME} ${PROJECT_NAME})
        set_target_properties(${TEST_NAME} PROPERTIES COMPILE_FLAGS ${TARGET_COMPILE_FLAGS})
      endforeach()
    endif()
    
    install(DIRECTORY launch urdf configuration_files
      DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
    )
    
    install(PROGRAMS scripts/tf_remove_frames.py
      DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
    )
    
    install(TARGETS ${PROJECT_NAME}
      ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
      LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
      RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
    )
    
    # Install source headers.
    file(GLOB_RECURSE HDRS "*.h")
    foreach(HDR ${HDRS})
      file(RELATIVE_PATH REL_FIL ${PROJECT_SOURCE_DIR} ${HDR})
      get_filename_component(INSTALL_DIR ${REL_FIL} DIRECTORY)
      install(
        FILES
          ${HDR}
        DESTINATION
          include/${INSTALL_DIR}
      )
    endforeach()
  • 相关阅读:
    gil
    异步
    字符串 最长回文字串
    字符串 最长公共前缀
    数组 合并区间
    python 排序
    2021.9.3 阿里笔试AK贴
    SIP协议详解
    fiddler抓包各字段的含义
    常见的HTTP状态码列表
  • 原文地址:https://www.cnblogs.com/lovebay/p/11238577.html
Copyright © 2011-2022 走看看