热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gitsubmodule与cmake(以Gflagsglog为例)

为当前项目添加submodule (以Gflagsglog为例)gitsubmoduleaddhttp:172.16.10.13source_dirgflagssubmodules


  • 为当前项目添加submodule  (以Gflags glog为例)

git submodule add http://172.16.10.13/source_dir/gflags submodules/gflags
git submodule add http://172.16.10.13/source_dir/glog submodules/glog


  • 首次clone 项目后,同步submodule

git submodule update --init --recursive


  • 项目cmake配置submodule

    •   源项目cmake



cmake_minimum_required (VERSION 2.8)
if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
message(FATAL_ERROR "
FATAL: In-source builds are not allowed.
You should create a separate directory for build files.
")
endif()
project (test_pro)
aux_source_directory(src DIR_SRCS)
add_executable(test_pro ${DIR_SRCS})
#target_link_libraries(test_pro)




    •   添加submodule后cmake



cmake_minimum_required (VERSION 2.8)
if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
message(FATAL_ERROR "
FATAL: In-source builds are not allowed.
You should create a separate directory for build files.
")
endif()
project (test_pro)
aux_source_directory(src DIR_SRCS)

### LOCALCMAKE_TOOLCHAIN 编译平台选择 例如:cmake -DLOCALCMAKE_TOOLCHAIN:STRING=1804 ..
### 设置submodule编译输出的位置
set(CMAKE_BUILD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/bld_${LOCALCMAKE_TOOLCHAIN})
#Glog Gflags 静态库位置
set(GLOG_LIBRARY
${CMAKE_BUILD_DIR}/glog/lib/libglog.a
)
set(GFLAGS_LIBRARY
${CMAKE_BUILD_DIR}/gflags/lib/libgflags.a
)
#Glog 自动化编译
add_dependencies(test_pro Glog)
add_custom_command(
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/submodules/glog/build.static
OUTPUT ${CMAKE_BUILD_DIR}/glog/include
OUTPUT ${CMAKE_BUILD_DIR}/glog/lib/libglog.a
COMMAND rm CMake* cmake* Makefile -rf
COMMAND cmake -DCMAKE_INSTALL_PREFIX=${CMAKE_BUILD_DIR}/glog -DCMAKE_PREFIX_PATH=${CMAKE_BUILD_DIR}/gflags/ ..
COMMAND make -j$(nproc)
COMMAND make install)

#Glog make install 安装输出文件
add_custom_target(Glog
DEPENDS ${CMAKE_BUILD_DIR}/gflags/lib/libgflags.a
DEPENDS ${CMAKE_BUILD_DIR}/glog/include
DEPENDS ${CMAKE_BUILD_DIR}/glog/lib/libglog.a
)
#Gflags 自动化编译
add_dependencies(test_pro Gflags)
add_custom_command(
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/submodules/gflags/build.static
OUTPUT ${CMAKE_BUILD_DIR}/gflags/include
OUTPUT ${CMAKE_BUILD_DIR}/gflags/lib/libgflags.a
COMMAND rm CMake* cmake* Makefile -rf
COMMAND cmake -DCMAKE_INSTALL_PREFIX=${CMAKE_BUILD_DIR}/gflags -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} ..
COMMAND make -j$(nproc)
COMMAND make install)

#Gflags make install 安装输出文件
add_custom_target(Gflags
DEPENDS ${CMAKE_BUILD_DIR}/gflags/include
DEPENDS ${CMAKE_BUILD_DIR}/gflags/lib/libgflags.a
)

add_executable(test_pro ${DIR_SRCS})
#项目对Glog Gflags的依赖
target_link_libraries(test_pro
${GLOG_LIBRARY}
${GFLAGS_LIBRARY})

 



推荐阅读
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • This document outlines the recommended naming conventions for HTML attributes in Fast Components, focusing on readability and consistency with existing standards. ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
author-avatar
陨落星辰W_955
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有