使用BLADE構建c++工程管理


使用BLADE構建c++工程管理

字數764 閱讀2753 評論2 

一. c++工程依賴管理

之前在百度一直使用comake2構建c++項目,十分方便。免去了手寫Makefile的痛苦,很多項目都不需要從零開始,其中的一個配置類似如下:

WORKROOT('../../../')
CopyUsingHardLink(True)
CPPFLAGS('-D_GNU_SOURCE -D__STDC_LIMIT_MACROS -DVERSION=\\"1.9.8.7\\"')
CFLAGS('-g -pipe -W -Wall -fPIC')
CXXFLAGS('-g -pipe -W -Wall -fPIC')
INCPATHS('. ./include ./output ./output/include')
CONFIGS('lib2-64/dict@dict_3-1-15-0_PD_BL')
CONFIGS('lib2-64/ullib@ullib_3-1-41-0_PD_BL')
CONFIGS('public/configure@configure_1-2-1-0_PD_BL')
CONFIGS('public/ependingpool@ependingpool_1-0-6-0_PD_BL')
Application('test',Sources(user_sources))
StaticLibrary('test',Sources(user_sources),HeaderFiles(user_headers))
SharedLibrary('test',Sources(user_sources),HeaderFiles(user_headers))

基本思路是:新的項目相當於代碼樹的葉子節點,它可以依賴現有代碼樹上有權限的任意的一個字節點代碼。comake2生成Makefile文件進行編譯。

WORKROOT: 指定了這顆代碼樹的根節點的相對位置
CONFIGS:指定了你要依賴的庫的位置,以及具體的版本,如果不指定則依賴trunk的代碼,這個和maven的snapshot版本等概念類似。
Application: 輸出二進制可運行
StaticLibrary:輸出靜態庫
SharedLibrary:輸出動態庫

很可惜comake2一直沒有開源。
類似的工具在其他的語言已經有了很好的解決方案
nodejs - npm
php - composer
python - pip
java - maven

二. BLADE - from 騰訊

blade@github
一個結合第三方lib和thrift的示例

  • 原理
    不同於COMAKE2使用make, BLADE使用scons進行編譯
    makefile和scons的區別在這里有着詳細的說明:make vs scons

  • 我們在實際項目中使用了blade,總結下優點如下:

    1. 配置簡單,只需要配置向下一層的依賴關系,因此可以逐層構建c++代碼倉庫
    2. 支持thrift和proto自動編譯連接的功能
  • 下圖說明一個binary代碼組織結構,注意:BLADE_ROOT文件,作為工程root目錄的標記


    總體代碼目錄組織.png
  • 二進制依賴配置

    binary.png

    其中
    name : blade作為依賴的最小單元,也是編譯的二進制的目標名稱
    src : cpp文件列表
    deps:依賴全局的pthread.a,依賴root目錄/thrift_protocol目錄
    optimize: 編譯的flag設置,是否使用c++0x
  • 使用小技巧
    1. 如果編譯失敗,開啟--verbose模式,會有詳細編譯連接命令。很多時候是由於BLADE_ROOT沒有合理配置
    2. 如果鏈接失敗,可以開啟ld_debug=all, 定位
      Valid options for the LD_DEBUG environment variable are:

libs display library search paths
reloc display relocation processing
files display progress for input file
symbols display symbol table processing
bindings display information about symbol binding
versions display version dependencies
scopes display scope information
all all previous options combined
statistics display relocation statistics
unused determined unused DSOs
help display this help message and exit


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM