99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

嵌入式必備工具 CMake 的使用套路!

今天,我們就通過一個簡單的Linux C 語言實戰案例,帶你深度剖析嵌入式 CMake 的核心套路。

使用 CMake 的好處

平臺無關性:一套配置文件,適配 ARM、x86 等多種架構。

模塊化管理:輕松分離驅動層、庫和應用程序,代碼結構一目了然。

自動化構建:從編譯、鏈接到生成固件,一條make命令搞定。

CMake例子

我們的例子包含三個核心模塊:

  • 靜態庫(strutils):字符串處理工具。
  • 動態庫(mathutils):數學計算工具。
  • 應用程序(myapp):主程序,調用上述兩個庫。

1.項目結構

linux-cmake-example/
├── CMakeLists.txt          # 頂層配置文件
├── lib/
│   ├── CMakeLists.txt      # 庫模塊配置
│   ├── include/
│   │   ├── string_utils.h  # 字符串庫頭文件
│   │   └── math_utils.h    # 數學庫頭文件
│   ├── string_utils.c      # 字符串庫實現
│   └── math_utils.c        # 數學庫實現
├── app/
│   ├── CMakeLists.txt      # 應用程序配置
│   ├── include/
│   └── main.c              # 主程序代碼
└── test/
    ├── CMakeLists.txt      # 測試模塊配置
    └── test_string_utils.c # 字符串庫測試代碼

每個文件夾都有獨立的CMakeLists.txt,各司其職,這種 “分而治之” 的思想是嵌入式項目管理的精髓。

2. 頂層 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(LinuxSystem C)

# 核心編譯選項:開啟嚴格檢查 + 優化
set(CMAKE_C_STANDARD 11)
add_compile_options(
  -Wall -Wextra -Werror
  -O2
)

# 引入子模塊:庫、應用、測試
add_subdirectory(lib)
add_subdirectory(app)
add_subdirectory(test)

關鍵點

  • add_compile_options統一設置編譯規則。
  • add_subdirectory讓 CMake 自動掃描子目錄的配置文件,簡化頂層邏輯。

3. 庫模塊:靜態庫、動態庫

靜態庫(strutils)配置

add_library(strutils STATIC
  string_utils.c
)
target_include_directories(strutils PUBLIC include)

關鍵點

  • add_library(strutils STATIC):創建靜態庫,代碼將直接嵌入可執行文件。
  • PUBLIC include:將頭文件路徑暴露給依賴它的模塊,確保其他代碼能調用庫函數。

動態庫(mathutils)配置

add_library(mathutils SHARED
  math_utils.c
)
target_include_directories(mathutils PUBLIC include)

關鍵點:

  • SHARED選項:生成獨立的動態鏈接庫,可被多個程序復用。
  • 實際部署時,需確保庫文件在系統庫路徑中,否則運行會報錯。

4. 應用程序:整合所有模塊

add_executable(myapp
  main.c
)
target_include_directories(myapp PRIVATE include)
target_link_libraries(myapp 
  strutils 
  mathutils
  m # 鏈接標準數學庫
)

關鍵點:

  • target_link_libraries將靜態庫、動態庫與主程序綁定。
  • PRIVATE include:僅在應用程序內部使用頭文件,不對外暴露。

5. 測試模塊

add_executable(test_strutils
  test_string_utils.c
)
target_link_libraries(test_strutils
  strutils
  cmocka # 引入單元測試框架
)
add_test(NAME test_strutils COMMAND test_strutils)

關鍵點

  • 使用cmocka框架編寫單元測試。
  • add_test定義測試任務,make test一鍵運行。

6、編譯執行

CMake進階技巧

1、 交叉編譯:在頂層CMakeLists.txt中添加工具鏈配置,適配 ARM 等嵌入式平臺。

set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)

2、代碼覆蓋率分析:引入CodeCoverage模塊,定位測試盲區

if(CMAKE_BUILD_TYPE MATCHES Coverage)
  include(CodeCoverage)
  append_coverage_compiler_flags()
  setup_target_for_coverage_lcov(
    NAME coverage
    EXECUTABLE ctest -j ${PROCESSOR_COUNT}
    DEPENDENCIES test_strutils
  )
endif()

3、自動化部署:通過install命令,一鍵將程序和庫部署到目標系統

install(TARGETS myapp DESTINATION bin)
install(TARGETS strutils mathutils DESTINATION lib)
install(DIRECTORY include/ DESTINATION include)
聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 2
收藏 2
關注 30
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 国产精品无码免费视频二三区 | 国产成人啪精品视频免费网站 | 中文字幕+乱码+中文乱码 | 夜色太晚| 孕妇奶水仑乱A级毛片免费看 | 久久久久久久久亚洲精品 | 每日更新在线观看AV | 人妻无码精品久久亚瑟影视 | 日韩国产一级毛片 | 人人妻人人澡人人爽精品日 | 精品国产一区二区三区久久久久 | 精品无码一区二区的天堂 | 久久精品a级毛片 | 欧美爆操| 中文字幕在线中字日韩 | 视频网站高清免费在线观看 | 亚洲精品国产福利 | 国产精品无 | 黄色毛片大全 | 综合视频在线 | 久久美利坚合众国AV无码 | 4hu四虎影视入口 | 欧美老熟妇乱子 | 久久久久久久波多野结衣高潮 | 国产精品一区二区三区视频网站 | 久操福利视频 | 日本最黄视频 | 色AV综合AV综合无码网站 | 蜜臀久久精品久久久久久酒店? | 97久久欧美国产亚洲 | 精品国产91久久久久久一区黄无 | 久久久av免费 | 色悠久久久久综合网国产 | aaaaa毛片| 久久er综合 | 欧美A级毛欧美一级在线观看 | 亚洲男人的天堂在线 | 国产精品99久久久久久小说 | 人人人草 | 亚洲男同帅GAY片在线观看 | 中文av一区 |