px4的CMakelists.txt阅读
来源:互联网 发布:中方网络花店 编辑:程序博客网 时间:2024/04/30 08:12
- ############################################################################
- #
- # Copyright (c) 2017 PX4 Development Team. All rights reserved.
- #
- # Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions
- # are met:
- #
- # 1. Redistributions of source code must retain the above copyright
- # notice, this list of conditions and the following disclaimer.
- # 2. Redistributions in binary form must reproduce the above copyright
- # notice, this list of conditions and the following disclaimer in
- # the documentation and/or other materials provided with the
- # distribution.
- # 3. Neither the name PX4 nor the names of its contributors may be
- # used to endorse or promote products derived from this software
- # without specific prior written permission.
- #
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- # OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- # POSSIBILITY OF SUCH DAMAGE.
- #
- ############################################################################
- #=============================================================================
- # CMAKE CODING STANDARD FOR PX4
- #
- # Structure
- # ---------------------------------------------------------------------------
- #
- # * Common functions should be included in px_base.cmake.
- #
- # * OS/ board specific fucntions should be include in
- # px_impl_${OS}.cmake or px4_impl_${OS}_${BOARD}.cmake.
- #
- # Formatting
- # ---------------------------------------------------------------------------
- #
- # * Use hard indents to match the px4 source code.
- #
- # * All function and script arguments are upper case.
- #
- # * All local variables are lower case.
- #
- # * All cmake functions are lowercase.
- #
- # * For else, endif, endfunction, etc, never put the name of the statement
- #
- # Functions/Macros
- # ---------------------------------------------------------------------------
- #
- # * Use px4_parse_function_args to parse functions and check for required
- # arguments. Unless there is only one argument in the function and it is clear.
- #
- # * Never use macros. They allow overwriting global variables and this
- # makes variable declarations hard to locate.
- #
- # * If a target from add_custom_* is set in a function, explicitly pass it
- # as an output argument so that the target name is clear to the user.
- #
- # * Avoid use of global variables in functions. Functions in a nested
- # scope may use global variables, but this makes it difficult to
- # resuse functions.
- #
- # Included CMake Files
- # ---------------------------------------------------------------------------
- #
- # * All variables in config files must have the prefix "config_".
- #
- # * Never set global variables in an included cmake file,
- # you may only define functions. This excludes config and Toolchain files.
- # This makes it clear to the user when variables are being set or targets
- # are being created.
- #
- # * Setting a global variable in a CMakeLists.txt file is ok, because
- # each CMakeLists.txt file has scope in the current directory and all
- # subdirectories, so it is not truly global.
- #
- # * All toolchain files should be included in the cmake
- # directory and named Toolchain-"name".cmake.
- #
- # Misc
- # ---------------------------------------------------------------------------
- #
- # * If referencing a string variable, don't put it in quotes.
- # Don't do "${OS}" STREQUAL "posix",
- # instead type ${OS} STREQUAL "posix". This will throw an
- # error when ${OS} is not defined instead of silently
- # evaluating to false.
- #
- #=============================================================================
- if (${CMAKE_VERSION} VERSION_LESS 3.1.0) //判断cmake版本不能低于3.1.0
- message("Not a valid CMake version")
- message("On Ubuntu >= 16.04, install or upgrade via:")
- message(" sudo apt-get install cmake")
- message("")
- message("Official website: https://cmake.org/download/")
- message(FATAL_ERROR "Update CMake and try again" )
- endif()
- # Warning: Changing this modifies CMake's internal workings
- # and leads to wrong toolchain detection
- cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
- set(PX4_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") //设置PX4源文件目录
- set(PX4_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}") //设置运行程序目录
- execute_process( //执行一个或多个子进程
- COMMAND Tools/check_submodules.sh //运行了tools/check_submodules.sh
- WORKING_DIRECTORY ${PX4_SOURCE_DIR} //工作目录再px4目录下为当前目录
- )
- #=============================================================================
- # configuration
- #
- # must come before project to set toolchain
- set(CONFIG "posix_sitl_default" CACHE STRING "desired configuration")
- string(REPLACE "_" ";" config_args ${CONFIG})
- list(GET config_args 0 OS)
- list(GET config_args 1 BOARD)
- list(GET config_args 2 LABEL)
- set(target_name "${OS}-${BOARD}-${LABEL}")
- file(GLOB_RECURSE configs RELATIVE cmake/configs "cmake/configs/*.cmake")
- set_property(CACHE CONFIG PROPERTY STRINGS ${configs})
- set(THREADS "4" CACHE STRING "number of threads to use for external build processes")
- set(DEBUG_PORT "/dev/ttyACM0" CACHE STRING "debugging port")
- set(EXTERNAL_MODULES_LOCATION "" CACHE STRING "External modules source location")
- if (NOT EXTERNAL_MODULES_LOCATION STREQUAL "")
- get_filename_component(EXTERNAL_MODULES_LOCATION "${EXTERNAL_MODULES_LOCATION}" ABSOLUTE)
- endif()
- list(APPEND CMAKE_MODULE_PATH "${PX4_SOURCE_DIR}/cmake")
- message(STATUS "CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
- set(config_module "configs/${CONFIG}")
- include(${config_module})
- include(common/coverage)
- include(common/sanitizers)
- # CMake build type
- # Debug Release RelWithDebInfo MinSizeRel Coverage
- if (NOT CMAKE_BUILD_TYPE)
- if (${OS} STREQUAL "nuttx")
- set(PX4_BUILD_TYPE "MinSizeRel")
- elseif (${OS} STREQUAL "bebop")
- set(PX4_BUILD_TYPE "MinSizeRel")
- else()
- set(PX4_BUILD_TYPE "RelWithDebInfo")
- endif()
- set(CMAKE_BUILD_TYPE ${PX4_BUILD_TYPE} CACHE STRING "Build type" FORCE)
- endif()
- set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug;Release;RelWithDebInfo;MinSizeRel;Coverage")
- message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
- #=============================================================================
- # git
- #
- include(common/px4_git)
- execute_process(
- COMMAND git describe --always --tags
- OUTPUT_VARIABLE git_tag
- OUTPUT_STRIP_TRAILING_WHITESPACE
- WORKING_DIRECTORY ${PX4_SOURCE_DIR}
- )
- execute_process(
- COMMAND Tools/tag_to_version.py --root ${PX4_SOURCE_DIR}
- OUTPUT_VARIABLE git_version
- WORKING_DIRECTORY ${PX4_SOURCE_DIR}
- )
- px4_add_git_submodule(TARGET git_cmake_hexagon PATH "cmake/cmake_hexagon")
- px4_add_git_submodule(TARGET git_driverframework PATH "src/lib/DriverFramework")
- px4_add_git_submodule(TARGET git_ecl PATH "src/lib/ecl")
- px4_add_git_submodule(TARGET git_gazebo PATH "Tools/sitl_gazebo")
- px4_add_git_submodule(TARGET git_gazebo_flow PATH "Tools/sitl_gazebo/external/OpticalFlow")
- px4_add_git_submodule(TARGET git_gazebo_klt PATH "Tools/sitl_gazebo/external/OpticalFlow/external/klt_feature_tracker")
- px4_add_git_submodule(TARGET git_gencpp PATH "Tools/gencpp")
- px4_add_git_submodule(TARGET git_genmsg PATH "Tools/genmsg")
- px4_add_git_submodule(TARGET git_gps_devices PATH "src/drivers/gps/devices")
- px4_add_git_submodule(TARGET git_jmavsim PATH "Tools/jMAVSim")
- px4_add_git_submodule(TARGET git_matrix PATH "src/lib/matrix")
- px4_add_git_submodule(TARGET git_mavlink PATH "mavlink/include/mavlink/v1.0")
- px4_add_git_submodule(TARGET git_mavlink2 PATH "mavlink/include/mavlink/v2.0")
- px4_add_git_submodule(TARGET git_nuttx PATH "NuttX")
- px4_add_git_submodule(TARGET git_uavcan PATH "src/modules/uavcan/libuavcan")
- px4_create_git_hash_header()
- #=============================================================================
- message(STATUS "PX4 VERSION: ${git_tag}")
- message(STATUS "CONFIG: ${target_name}")
- # The URL for the elf file for crash logging
- if (DEFINED ENV{BUILD_URI})
- set(BUILD_URI $ENV{BUILD_URI})
- else()
- set(BUILD_URI "localhost")
- endif()
- add_definitions(-DBUILD_URI=${BUILD_URI})
- # Define GNU standard installation directories
- include(GNUInstallDirs)
- # Add support for external project building
- include(ExternalProject)
- # Setup install paths
- if (NOT CMAKE_INSTALL_PREFIX)
- if (${OS} STREQUAL "posix")
- set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "Install path prefix" FORCE)
- endif()
- endif()
- if (CMAKE_INSTALL_PREFIX)
- message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
- endif()
- #=============================================================================
- # require px4 module interface
- set(px4_required_interface
- px4_os_prebuild_targets
- px4_os_add_flags
- )
- foreach(cmd ${px4_required_interface})
- if (NOT COMMAND ${cmd})
- message(FATAL_ERROR "${config_module} must implement ${cmd}")
- endif()
- endforeach()
- set(px4_required_config config_module_list)
- foreach(conf ${px4_required_config})
- if (NOT DEFINED ${conf})
- message(FATAL_ERROR "cmake/${config_module} must define ${conf}")
- endif()
- endforeach()
- # force static lib build
- set(BUILD_SHARED_LIBS OFF)
- #=============================================================================
- # ccache
- #
- option(CCACHE "Use ccache if available" OFF)
- find_program(CCACHE_PROGRAM ccache)
- if (CCACHE AND CCACHE_PROGRAM)
- message(STATUS "Enabled ccache: ${CCACHE_PROGRAM}")
- set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
- endif()
- #=============================================================================
- # project definition
- #
- project(px4 CXX C ASM)
- set(package-contact "px4users@googlegroups.com")
- #=============================================================================
- # find programs and packages
- #
- # see if catkin was invoked to build this
- if (CATKIN_DEVEL_PREFIX)
- message(STATUS "catkin ENABLED")
- find_package(catkin REQUIRED)
- if (catkin_FOUND)
- catkin_package()
- else()
- message(FATAL_ERROR "catkin not found")
- endif()
- endif()
- find_package(PythonInterp REQUIRED)
- px4_find_python_module(jinja2 REQUIRED)
- #=============================================================================
- # cmake testing
- #
- enable_testing()
- include(CTest)
- #=============================================================================
- # generate compile command database
- #
- set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- #=============================================================================
- # check required toolchain variables
- #
- # PX4 requires c++11
- set(CMAKE_CXX_STANDARD 11)
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
- # PX4 requires c99
- set(CMAKE_C_STANDARD 99)
- set(CMAKE_C_STANDARD_REQUIRED ON)
- set(required_variables CMAKE_C_COMPILER_ID CMAKE_CXX_COMPILER_ID)
- foreach(var ${required_variables})
- if (NOT ${var})
- message(FATAL_ERROR "Toolchain/config must define ${var}")
- endif()
- endforeach()
- # print full c compiler version
- execute_process(COMMAND ${CMAKE_C_COMPILER} --version
- OUTPUT_VARIABLE c_compiler_version
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- STRING(REGEX MATCH "[^\n]*" c_compiler_version_short ${c_compiler_version})
- message(STATUS "C compiler: ${c_compiler_version_short}")
- # print full c++ compiler version
- execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version
- OUTPUT_VARIABLE cxx_compiler_version
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- STRING(REGEX MATCH "[^\n]*" cxx_compiler_version_short ${cxx_compiler_version})
- message(STATUS "C++ compiler: ${cxx_compiler_version_short}")
- #=============================================================================
- # external libraries
- #
- px4_os_prebuild_targets(OUT prebuild_targets
- BOARD ${BOARD}
- THREADS ${THREADS})
- #=============================================================================
- # build flags
- #
- px4_os_add_flags(
- BOARD ${BOARD}
- C_FLAGS c_flags
- CXX_FLAGS cxx_flags
- OPTIMIZATION_FLAGS optimization_flags
- EXE_LINKER_FLAGS exe_linker_flags
- INCLUDE_DIRS include_dirs
- LINK_DIRS link_dirs
- DEFINITIONS definitions)
- px4_join(OUT CMAKE_EXE_LINKER_FLAGS LIST "${exe_linker_flags}" GLUE " ")
- px4_join(OUT CMAKE_C_FLAGS LIST "${c_flags};${optimization_flags}" GLUE " ")
- px4_join(OUT CMAKE_CXX_FLAGS LIST "${cxx_flags};${optimization_flags}" GLUE " ")
- include_directories(${include_dirs})
- #message("INCLUDE_DIRS=${include_dirs}")
- link_directories(${link_dirs})
- add_definitions(${definitions})
- #=============================================================================
- # message, and airframe generation
- #
- include(common/px4_metadata)
- add_subdirectory(msg)
- px4_generate_messages(TARGET msg_gen
- MSG_FILES ${msg_files}
- OS ${OS}
- INCLUDES ${msg_include_paths}
- DEPENDS git_genmsg git_gencpp prebuild_targets
- )
- px4_generate_airframes_xml(BOARD ${BOARD})
- #=============================================================================
- # DriverFramework
- #
- # List the DriverFramework drivers
- if (DEFINED config_df_driver_list)
- message("DF Drivers: ${config_df_driver_list}")
- endif()
- set(df_driver_libs)
- foreach(driver ${config_df_driver_list})
- add_subdirectory(src/lib/DriverFramework/drivers/${driver})
- list(APPEND df_driver_libs df_${driver})
- message("Adding DF driver: ${driver}")
- endforeach()
- #=============================================================================
- # external projects
- #
- set(ep_base ${PX4_BINARY_DIR}/external)
- set_property(DIRECTORY PROPERTY EP_BASE ${ep_base})
- # add external project install folders to build
- link_directories(${ep_base}/Install/lib)
- include_directories(${ep_base}/Install/include)
- # add the directories so cmake won't warn
- execute_process(COMMAND cmake -E make_directory ${ep_base}/Install/lib)
- execute_process(COMMAND cmake -E make_directory ${ep_base}/Install/include)
- #=============================================================================
- # external modules
- #
- if (NOT EXTERNAL_MODULES_LOCATION STREQUAL "")
- message(STATUS "External modules: ${EXTERNAL_MODULES_LOCATION}")
- add_subdirectory("${EXTERNAL_MODULES_LOCATION}/src" external_modules_src)
- set(config_module_list_external_expanded)
- foreach(external_module ${config_module_list_external})
- list(APPEND config_module_list_external_expanded
- ${EXTERNAL_MODULES_LOCATION}/src/${external_module})
- endforeach()
- set(config_module_list
- ${config_module_list}
- ${config_module_list_external_expanded}
- )
- endif()
- #=============================================================================
- # subdirectories
- #
- set(module_libraries)
- foreach(module ${config_module_list})
- string(REGEX MATCH "^[./]" external_module ${module})
- if (external_module)
- STRING(REGEX REPLACE "//" "/" EXT_MODULE ${module})
- STRING(REGEX REPLACE "/" "__" EXT_MODULE_PREFIX ${EXT_MODULE})
- add_subdirectory(${module} ${PX4_BINARY_DIR}/${EXT_MODULE_PREFIX})
- else()
- add_subdirectory(src/${module})
- endif()
- px4_mangle_name(${module} mangled_name)
- list(APPEND module_libraries ${mangled_name})
- endforeach()
- # Keep track of external shared libs required for modules
- set(module_external_libraries "${module_external_libraries}" CACHE INTERNAL "module_external_libraries")
- add_subdirectory(src/firmware/${OS})
- if (config_io_board)
- add_subdirectory(src/modules/px4iofirmware)
- endif()
- #=============================================================================
- # generate custom target to print for all executable and module cmake targets
- #
- if (all_posix_cmake_targets)
- list(SORT all_posix_cmake_targets)
- px4_join(OUT posix_cmake_target_list LIST ${all_posix_cmake_targets} GLUE "\\n")
- add_custom_target(list_cmake_targets
- COMMAND sh -c "printf \"${posix_cmake_target_list}\\n\""
- COMMENT "List of cmake targets that can be matched by PX4_NO_OPTIMIZATION:"
- VERBATIM
- )
- endif()
- #=============================================================================
- # packaging
- #
- # Important to having packaging at end of cmake file.
- #
- set(CPACK_PACKAGE_NAME ${PROJECT_NAME}-${CONFIG})
- set(CPACK_PACKAGE_VERSION ${git_version})
- set(CPACK_PACKAGE_CONTACT ${package-contact})
- set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
- set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
- set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
- set(short-description "The px4 autopilot.")
- set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${short-description})
- set(CPACK_GENERATOR "ZIP")
- set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${CONFIG}-${git_tag}")
- set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${git_version}")
- set(CPACK_SOURCE_GENERATOR "ZIP;TBZ2")
- set(CPACK_PACKAGING_INSTALL_PREFIX "")
- set(CPACK_SET_DESTDIR "OFF")
- if ("${CMAKE_SYSTEM}" MATCHES "Linux")
- find_program(DPKG_PROGRAM dpkg)
- if (EXISTS ${DPKG_PROGRAM})
- list (APPEND CPACK_GENERATOR "DEB")
- endif()
- endif()
- include(CPack)
- # vim: set noet fenc=utf-8 ff=unix ft=cmake :
0
上一篇:Qt对话框部分学习
下一篇:cmake学习
相关热门文章
- SHTML是什么_SSI有什么用...
- 查看linux中某个端口(port)...
- 卡尔曼滤波的原理说明...
- shell中字符串操作
- 关于java中的“错误:找不到或...
给主人留下些什么吧!~~
评论热议
阅读全文
0 0
- px4的CMakelists.txt阅读
- PX4代码CMakeLists.txt的简单解读
- PX4 CMakeLists.txt分析
- CMakeLists.txt的写法
- CMakeLists.txt的写法
- CMakeLists.txt的写法
- CMakeLists.txt的写法
- CMakeLists.txt的写法
- CMakeLIsts.txt的编写
- CMakeLists.txt的写法
- CmakeLists.txt文档的使用
- 简单的CMakeLists.txt文件
- 通用的 cmakeLists.txt 文件
- CMakelists.txt
- CMakeLists.txt
- CMakeLists.txt
- CMakeLists.txt
- CMakeLists.txt
- 205. Isomorphic Strings
- xmemcached下载地址
- PIC16F877A的TIME0学习
- Qt事件学习
- Qt对话框部分学习
- px4的CMakelists.txt阅读
- cmake学习
- STM32点LED灯
- Docker部署Web应用(Django)
- 沉浸式状态栏
- ap端编译时遇到fatal error:openssl/opensslv.h: No such file or directory
- AOE网上的关键路径
- 按需加载图片(图片懒加载)
- SD卡之寄存器介绍
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
万绿湖特产
新万绿湖酒楼
万绿湖水库鱼
万绿湖怎么玩
万绿湖酒楼
万绿湖饭店
万绿湖是哪里
万绿湖农产品
万绿湖 攻略
万绿湖餐厅
万绿湖地址
万绿湖直饮水
万绿湖休闲会所
万绿湖客家菜
万绿湖有什么玩的
万绿湖简介
万绿湖摄影
万绿湖五星级酒店
万绿湖要不要门票
万绿湖骑行攻略
万绿湖 自驾
万绿湖鱼庄
万绿湖有多深
万绿湖附近景点
万绿湖 桂山
万绿湖食府
万绿湖石娟鱼
万绿湖国际公馆
河原万绿湖
万绿湖附近宾馆
万绿湖 农夫山泉
万绿湖酒家
和源万绿湖
万绿湖的鱼
万绿湖国际酒店
万绿湖风景图片
多彩的万绿湖
多彩的万绿湖简谱
万绿湖门票一个人多少钱
河源万绿湖附近的酒店
万绿湖东方国际酒店