install.cpp文件install_package函数分析

本文介绍了一个用于安装软件包的函数install_package的具体实现细节。该函数接收四个参数:要安装的文件路径、是否清除缓存标志、安装日志文件路径及是否需要挂载分区。文章详细解释了函数内部如何进行日志记录、挂载检查和调用真正安装过程。
int
install_package(const char* path, bool* wipe_cache, const char* install_file,
                bool needs_mount)
{
    modified_flash = true;

    FILE* install_log = fopen_path(install_file, "w");
    if (install_log) { //lefty_lan注:检查文件/tmp/last_install是否存在
        fputs(path, install_log);//lefty_lan注:将新的文件路径/sideload/package.zip记录到/tmp/last_install文件中
        fputc('\n', install_log);
    } else {
        LOGE("failed to open last_install: %s\n", strerror(errno));
    }
    int result;
    if (setup_install_mounts() != 0) { //lefty_lan注:确保/tmp和/cache分区已经mount 
        LOGE("failed to set up expected mounts for install; aborting\n");
        result = INSTALL_ERROR;
    } else {
        result = really_install_package(path, wipe_cache, needs_mount);//lefty_lan注:继续安装
    }
    if (install_log) {
        fputc(result == INSTALL_SUCCESS ? '1' : '0', install_log);
        fputc('\n', install_log);
        fclose(install_log);
    }
    return result;
}


有一个ros框架项目,现在有一个cpp文件使用了其他项目的头文件,该如何修改ros项目的cmakelists,使得该cpp文件可以正常编译 cmake_minimum_required(VERSION 3.4) project(ssp_gripper) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(catkin REQUIRED COMPONENTS roscpp message_generation control_msgs actionlib sensor_msgs xmlrpcpp actionlib_msgs serial ) find_package(Franka 0.9.0 QUIET) if(NOT Franka_FOUND) find_package(Franka 0.8.0 REQUIRED) endif() find_package(aubo_sdk REQUIRED PATHS /home/robot-nanjing/aubo_sdk-0.26.0-rc.1-Linux_x86_64+ce93216/lib/cmake/aubo_sdk NO_DEFAULT_PATH ) add_action_files( DIRECTORY action FILES Grasp.action Homing.action Stop.action Move.action ) add_message_files( DIRECTORY msg FILES GraspEpsilon.msg ) generate_messages(DEPENDENCIES actionlib_msgs) catkin_package( INCLUDE_DIRS include LIBRARIES ssp_gripper CATKIN_DEPENDS roscpp message_runtime control_msgs actionlib sensor_msgs xmlrpcpp actionlib_msgs serial DEPENDS Franka ) add_library(jodellTool2 SHARED IMPORTED) set_target_properties(jodellTool2 PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/lib/libjodellTool2.so INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/include INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/include/dh ) add_library(zgGripperV6 SHARED IMPORTED) set_target_properties(zgGripperV6 PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/lib/libzgGripperV6.so INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/include/zgv6" ) add_library(ssp_gripper src/ssp_gripper.cpp src/jodellgripper.cpp src/dh_device.cpp src/dh_gripper.cpp src/dh_modbus_gripper.cpp src/zg_gripper_v6.cpp src/dh_gripper_ag95.cpp src/dh_ag95/hand_controller.cpp src/dh_ag95/hand_driver.cpp src/dh_ag95/DH_datastream.cpp ) add_dependencies(ssp_gripper ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp ) target_link_libraries(ssp_gripper ${Franka_LIBRARIES} ${catkin_LIBRARIES} jodellTool2 zgGripperV6 ) target_include_directories(ssp_gripper SYSTEM PUBLIC ${Franka_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS} ) target_include_directories(ssp_gripper PUBLIC include ) add_executable(ssp_gripper_node src/ssp_gripper_node.cpp ) add_dependencies(ssp_gripper_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ssp_gripper ) target_link_libraries(ssp_gripper_node ${catkin_LIBRARIES} ssp_gripper ) target_include_directories(ssp_gripper_node SYSTEM PUBLIC ${catkin_INCLUDE_DIRS} ) ## Installation install(TARGETS ssp_gripper ssp_gripper_node ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) install(DIRECTORY include/${PROJECT_NAME}/ DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} ) install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) install(DIRECTORY config DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) install(FILES lib/libjodellTool2.so lib/libzgGripperV6.so DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}) ## Tools include(${CMAKE_CURRENT_LIST_DIR}/../cmake/ClangTools.cmake OPTIONAL RESULT_VARIABLE CLANG_TOOLS ) if(CLANG_TOOLS) file(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) file(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h ${CMAKE_CURRENT_SOURCE_DIR}/src/*.h ) add_format_target(ssp_gripper FILES ${SOURCES} ${HEADERS}) add_tidy_target(ssp_gripper FILES ${SOURCES} DEPENDS ssp_gripper ssp_gripper_node ) endif() #set(CMAKE_INSTALL_RPATH "${CATKIN_PACKAGE_LIB_DESTINATION}") # 测试支持 if(CATKIN_ENABLE_TESTING) find_package(rostest REQUIRED) find_package(GTest REQUIRED) # 包含测试目录 add_subdirectory(ut) endif() ## XSJ add_executable(example_state src/example_state.cpp ) target_link_libraries(example_state ${catkin_LIBRARIES} aubo_sdk::aubo_sdk ) # 设置运行时 rpath,避免手动 export LD_LIBRARY_PATH set_target_properties(example_state PROPERTIES BUILD_RPATH "/home/robot-nanjing/aubo_sdk-0.26.0-rc.1-Linux_x86_64+ce93216/lib" INSTALL_RPATH "/home/robot-nanjing/aubo_sdk-0.26.0-rc.1-Linux_x86_64+ce93216/lib" ) install(TARGETS example_state RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) ## XSJ
09-09
cmake_minimum_required(VERSION 3.4) project(ssp_gripper) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(catkin REQUIRED COMPONENTS roscpp message_generation control_msgs actionlib sensor_msgs xmlrpcpp actionlib_msgs serial ) find_package(Franka 0.9.0 QUIET) if(NOT Franka_FOUND) find_package(Franka 0.8.0 REQUIRED) endif() # find_package(aubo_sdk REQUIRED # PATHS /home/robot-nanjing/aubo_sdk-0.26.0-rc.1-Linux_x86_64+ce93216/lib/cmake/aubo_sdk # NO_DEFAULT_PATH # ) add_action_files( DIRECTORY action FILES Grasp.action Homing.action Stop.action Move.action ) add_message_files( DIRECTORY msg FILES GraspEpsilon.msg ) generate_messages(DEPENDENCIES actionlib_msgs) catkin_package( INCLUDE_DIRS include LIBRARIES ssp_gripper CATKIN_DEPENDS roscpp message_runtime control_msgs actionlib sensor_msgs xmlrpcpp actionlib_msgs serial DEPENDS Franka ) add_library(jodellTool2 SHARED IMPORTED) set_target_properties(jodellTool2 PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/lib/libjodellTool2.so INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/include INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/include/dh ) add_library(zgGripperV6 SHARED IMPORTED) set_target_properties(zgGripperV6 PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/lib/libzgGripperV6.so INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/include/zgv6" ) add_library(ssp_gripper src/ssp_gripper.cpp src/jodellgripper.cpp src/dh_device.cpp src/dh_gripper.cpp src/dh_modbus_gripper.cpp src/zg_gripper_v6.cpp src/dh_gripper_ag95.cpp src/dh_ag95/hand_controller.cpp src/dh_ag95/hand_driver.cpp src/dh_ag95/DH_datastream.cpp ) add_dependencies(ssp_gripper ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp ) target_link_libraries(ssp_gripper ${Franka_LIBRARIES} ${catkin_LIBRARIES} jodellTool2 zgGripperV6 ) target_include_directories(ssp_gripper SYSTEM PUBLIC ${Franka_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS} ) target_include_directories(ssp_gripper PUBLIC include ) ## XSJ set(AUBO_SDK_ROOT "/home/robot-nanjing/aubo_sdk-0.26.0-rc.1-Linux_x86_64+ce93216") include_directories( ${AUBO_SDK_ROOT}/include ) message(STATUS "=== ENTER add example_state ===") add_executable(example_state src/example_state.cpp ) message(STATUS "=== LEAVE add example_state ===") target_link_libraries(example_state ${AUBO_SDK_ROOT}/lib Threads::Threads) set_target_properties(example_state PROPERTIES BUILD_RPATH "${AUBO_SDK_ROOT}/lib" INSTALL_RPATH "${AUBO_SDK_ROOT}/lib" ) install(TARGETS example_state RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) ## XSJ add_executable(ssp_gripper_node src/ssp_gripper_node.cpp ) add_dependencies(ssp_gripper_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ssp_gripper ) target_link_libraries(ssp_gripper_node ${catkin_LIBRARIES} ssp_gripper ) target_include_directories(ssp_gripper_node SYSTEM PUBLIC ${catkin_INCLUDE_DIRS} ) ## Installation install(TARGETS ssp_gripper ssp_gripper_node ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) install(DIRECTORY include/${PROJECT_NAME}/ DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} ) install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) install(DIRECTORY config DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) install(FILES lib/libjodellTool2.so lib/libzgGripperV6.so DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}) ## Tools include(${CMAKE_CURRENT_LIST_DIR}/../cmake/ClangTools.cmake OPTIONAL RESULT_VARIABLE CLANG_TOOLS ) if(CLANG_TOOLS) file(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) file(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h ${CMAKE_CURRENT_SOURCE_DIR}/src/*.h ) add_format_target(ssp_gripper FILES ${SOURCES} ${HEADERS}) add_tidy_target(ssp_gripper FILES ${SOURCES} DEPENDS ssp_gripper ssp_gripper_node ) endif() #set(CMAKE_INSTALL_RPATH "${CATKIN_PACKAGE_LIB_DESTINATION}") # 测试支持 if(CATKIN_ENABLE_TESTING) find_package(rostest REQUIRED) find_package(GTest REQUIRED) # 包含测试目录 add_subdirectory(ut) endif() 完整的cmakelist文件如上,请依据报错信息,优化该文件
09-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值