在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

cmake學習的總結(一)

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-24 18:03 ? 次閱讀

大家晚上好,在這里祝大家端午安康。今天給大家分享的是工程管理工具cmake,沒有先介紹makefile工程管理工具(坦白來說,這兩者都差不多,cmake最終還是會生成Makefile的,只是說cmake語法稍微比較簡單一些,沒有Makefile那么復雜!)。就自己個人經歷,現在一般公司去寫Makefile和cmake的比較少(當然去招聘網站上,有的時候還是可以看到有這個技能要求會寫的,所以說能夠自己寫出來是最為完美的!),一般都是直接使用廠家的Makefile或者Cmake;但作為學習,還是要認真學習里面的原理,比如出現了錯誤,你要能夠定位到錯誤并把它解決掉,因為可能錯誤就出現在配置好的Makefile或者Cmake里面,所以你要看的懂里面代碼的意思(也就是說,你知道這個工具是這樣用,但是也要明白它的原理機制,做到之知其然,知其所以個然來!),這樣才能把問題解決掉。

而且就個人見解,在傳統的linux工程管理用Makefile的比較多(Uboot里面也是大量使用Makefile來進行管理工程);在新型領域,比如物聯網開發(特別是一些開源項目等),用Cmake的比較多(當然也有可能是例外哈!);好了,廢話就不多說了,開始來學習了:

一、Cmake學習使用:

1、安裝Cmake管理工具:

一般實際嵌入式linux開發,幾乎都是用Ubuntu來開發的,因為那啥,安裝啥應用程序的非常方便,只需一個命令“apt install + 應用程序名稱” 大部分都直接搞定,不用再去配置(特殊的,就例外,還要一些其他相關配置!),安裝Cmake就是一條命令直接搞定:

root@txp-virtual-machine:/home/txp# apt install cmake

Reading package lists... Done

Building dependency tree

2、先從一個簡單示例,來得出一般書寫步驟規律:

這里先寫一個簡單的代碼工程main.c,然后再使用我們的cmake來管理代碼工程:

#include <stdio.h>

int main(void)

printf("TXP嵌入式");

return 0;

然后開始寫cmake工程管理文件,我在當前目錄建立一個CMakeLists.txt文件,然后再往里面開始工程管理代碼

root@txp-virtual-machine:/home/txp/test# pwd

/home/txp/test

root@txp-virtual-machine:/home/txp/test# touch CMakeLists.txt

root@txp-virtual-machine:/home/txp/test# ls

CMakeLists.txt main.c

CMakeLists.txt文件里面的內容如下:

cmake_minimum_required (VERSION 2.8)

project (main)

add_executable(main main.c)

解釋一下這三條語句分別代表什么意思:

1、表示cmake最低執行版本是2.8才有效來管理我們的工程項目。

2、表示整個工程名為main

3、表示最終要生成的elf文件的名字叫main,使用的源文件是main.c

現在我們來實現cmake的功能,在當前目錄下,使用命令"cmake ."(.表示當前目錄,而..表示上一級目錄),生成makefile等相關文件;然后再執行一下make命令進行編譯工程,就能生成可執行文件main了,同時也會生成makefile文件,最后就可以執行可執行main文件,就能得到我們所要的結果:

root@txp-virtual-machine:/home/txp/test# cmake .

-- The C compiler identification is GNU 4.8.4

-- The CXX compiler identification is GNU 4.8.4

-- Check for working C compiler: /usr/bin/cc

-- Check for working C compiler: /usr/bin/cc -- works

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

-- Check for working CXX compiler: /usr/bin/c++

-- Check for working CXX compiler: /usr/bin/c++ -- works

-- Detecting CXX compiler ABI info

-- Detecting CXX compiler ABI info - done

-- Configuring done

-- Generating done

-- Build files have been written to: /home/txp/test

root@txp-virtual-machine:/home/txp/test# ls

CMakeCache.txt CMakeFiles cmake_install.cmake CMakeLists.txt main main.c Makefile

root@txp-virtual-machine:/home/txp/test# make

Scanning dependencies of target main

[100%] Building C object CMakeFiles/main.dir/main.c.o

Linking C executable main

[100%] Built target main

root@txp-virtual-machine:/home/txp/test# ./main

TXP嵌入式

如果你再好奇一下的話,可以打開看看Makefile里面的內容是啥,很容易想到是用makefile的方式來實現對工程main的管理,這里我就不畫蛇添足把源代碼貼出來了。cmake_install.cmake 是一些相關配置選項:

# Install script for directory: /home/txp/test

# Set the install prefix

IF(NOT DEFINED CMAKE_INSTALL_PREFIX)

SET(CMAKE_INSTALL_PREFIX "/usr/local")

ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)

STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")

# Set the install configuration name.

IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)

IF(BUILD_TYPE)

STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""

CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")

ELSE(BUILD_TYPE)

SET(CMAKE_INSTALL_CONFIG_NAME "")

ENDIF(BUILD_TYPE)

MESSAGE(STATUS "Install configuration: "${CMAKE_INSTALL_CONFIG_NAME}"")

ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)

# Set the component getting installed.

IF(NOT CMAKE_INSTALL_COMPONENT)

IF(COMPONENT)

MESSAGE(STATUS "Install component: "${COMPONENT}"")

SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}")

ELSE(COMPONENT)

SET(CMAKE_INSTALL_COMPONENT)

ENDIF(COMPONENT)

ENDIF(NOT CMAKE_INSTALL_COMPONENT)

# Install shared libraries without execute permission?

IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)

SET(CMAKE_INSTALL_SO_NO_EXE "1")

ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)

IF(CMAKE_INSTALL_COMPONENT)

SET(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")

ELSE(CMAKE_INSTALL_COMPONENT)

SET(CMAKE_INSTALL_MANIFEST "install_manifest.txt")

ENDIF(CMAKE_INSTALL_COMPONENT)

FILE(WRITE "/home/txp/test/${CMAKE_INSTALL_MANIFEST}" "")

FOREACH(file ${CMAKE_INSTALL_MANIFEST_FILES})

FILE(APPEND "/home/txp/test/${CMAKE_INSTALL_MANIFEST}" "${file}")

ENDFOREACH(file)

而CMakeFiles是一個文件夾,里面文件內容如下:

root@txp-virtual-machine:/home/txp/test/CMakeFiles# ls

2.8.12.2 cmake.check_cache CMakeDirectoryInformation.cmake

CMakeOutput.log CMakeTmp main.dir Makefile2

Makefile.cmake progress.marks TargetDirectories.txt

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • IC設計
    +關注

    關注

    38

    文章

    1350

    瀏覽量

    105303
  • Makefile
    +關注

    關注

    1

    文章

    125

    瀏覽量

    19590
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    嵌入式AI技術之深度學習:數據樣本預處理過程中使用合適的特征變換對深度學習的意義

    ? 作者:蘇勇Andrew 使用神經網絡實現機器學習,網絡的每個層都將對輸入的數據做次抽象,多層神經網絡構成深度學習的框架,可以深度理解數據中所要表示的規律。從原理上看,使用深度學習
    的頭像 發表于 04-02 18:21 ?759次閱讀

    使用STM32CubeMX生成CMake工程中的FLASH.ld被更改怎么解決?

    使用STM32CubeMX生成CMake工程之后,對STM32xxxx_FLASH.ld進行了修改。然后再次使用STM32CubeMX對工程進行修改的時候,STM32xxxx_FLASH.ld文件匯總被修改的部分會被恢復原狀。請問各位有沒有好的辦法能夠解決這個問題,煩請指教!!!
    發表于 03-10 06:52

    在CubeMX V6.13.0版本上配置的CMake工程無法通過編譯怎么解決?

    在 CubeMX V6.13.0 版本上配置的 CMake 工程無法通過編譯,報錯如下圖
    發表于 03-07 16:59

    為什么無法在OpenVINO? 2021.3源中使用CMAKE編譯ONNX模型?

    嘗試從源版本 2021.3 編譯OpenVINO? 錯誤: ~/項目/OpenVINO/cmake-build-debug/_deps/ext_onnx-src/onnx/onnx_pb.h
    發表于 03-05 08:29

    TOF學習總結

    iToF(間接飛行時間)技術中,波長越短,分辨細節的能力越好,主要原因與光的波動特性和調制信號的特性密切相關。以下是詳細解釋:1. 光的波動特性:波長與分辨率的關系波長越短,空間分辨率越高:光的波長決定了其能夠分辨的最小細節。根據光學理論,分辨率與波長成反比,波長越短,能夠分辨的特征尺寸越小。例如,可見光的波長(400-700 nm)比紅外光(通常用于iToF,波長約850 nm)更短,因此可見光能夠分辨更細微的細節。衍射極限:光的衍
    發表于 02-25 17:49 ?0次下載

    關于RISC-V芯片的應用學習總結

    RISC-V芯片作為種基于精簡指令集計算(RISC)原則的開源指令集架構(ISA)芯片,近年來在多個領域展現出了廣泛的應用潛力和顯著優勢。以下是對RISC-V芯片應用的總結。 RISC-V芯片
    發表于 01-29 08:38

    關于中斷知識學習總結筆記

    《關于中斷知識學習總結筆記》 、中斷的核心概念 中斷是計算機運行過程中的種重要機制,它能夠使計算機在執行主程序時,暫停當前任務去響應特定的事件或請求,處理完成后再返回主程序繼續執行
    發表于 11-23 11:23

    學習go語言的過程踩過的坑

    作為個5年的phper,這兩年公司和個人都在順應技術趨勢,新項目慢慢從php轉向了go語言,從2021年到現在,筆者手上也先后開發了兩個go項目。在學習go語言的過程中也學習總結
    的頭像 發表于 11-11 09:22 ?413次閱讀

    國產芯上運行TinyMaxi輕量級的神經網絡推理庫-米爾基于芯馳D9國產商顯板

    cmake生成構建系統 使用make構建可執行文件然后運行 可以看到輸出信息 MNIST 示例默認未使用任何指令加速,運行了張 28×28 的手寫數字模擬圖像,共消耗了 0.114 毫秒 MBNET示例
    發表于 08-09 18:26

    個暑假如何學習單片機

    個暑假是學習和掌握單片機基礎知識的良好時機。以下是個關于如何在暑假期間學習單片機的建議計劃
    的頭像 發表于 07-03 09:19 ?845次閱讀
    <b class='flag-5'>一</b>個暑假如何<b class='flag-5'>學習</b>單片機

    執行build.py menuconfig時報“ Unknown CMake command \"__add_uf2_targets\".”錯誤,請問是什么原因?

    執行build.py menuconfig時報“Unknown CMake command \"__add_uf2_targets\".”錯誤,請問這是什么原因?
    發表于 06-27 06:21

    大模型技術及趨勢總結

    本篇文章旨在希望大家對大模型的本質、技術和發展趨勢有簡單的了解。由于近期大模型技術發展很快,這里對大模型的技術、本質及未來趨勢進行總結和探討時,因為水平有限,疏漏在所難免。請大家諒解。 引言 大模型
    的頭像 發表于 06-21 17:38 ?942次閱讀
    大模型技術及趨勢<b class='flag-5'>總結</b>

    idf.py menuconfig的時候總是提示cmake301 error的原因?

    idf.py menuconfig的時候總是,提示cmake301 error 提示沒有這個目錄,手動創建目錄之后,還會出現更多依賴目錄 例: CMake Error at /home
    發表于 06-20 06:01

    剛剛裝好esp32 elipse CMAKE編譯環境,hello word編譯不通過怎么解決?

    CMake Error at E:/Work/eclipse-esp/esp-idf/tools/cmake/component.cmake:305 (message): Include
    發表于 06-18 06:15

    華為PCBA檢查規范設計總結

    福利來啦! 給大家分享《華為PCBA檢查規范設計總結
    的頭像 發表于 06-15 16:25 ?2475次閱讀
    華為PCBA檢查規范設計<b class='flag-5'>總結</b>
    主站蜘蛛池模板: 777午夜精品免费播放 | 午夜神马福利影院 | 日本人的色道www免费一区 | 一级不卡毛片免费 | 在线色视频网站 | tube69xxxxhd日本| 欧色视频 | 老色皮 | 99久久99久久免费精品蜜桃 | 日韩毛片免费在线观看 | 美女被上视频 | 性午夜影院 | 狠狠色噜狠狠狠狠色综合久 | 日本免费黄色大片 | 午夜福利毛片 | 狠狠色伊人亚洲综合第8页 狠狠色依依成人婷婷九月 狠狠色影院 | 狠狠狠 | 五月婷婷六月色 | 亚洲午夜在线视频 | 亚洲精品自拍区在线观看 | 欧美亚洲综合在线观看 | 午夜在线观看免费 | 欧美婷婷综合 | 免费看黄视频网站 | 欧美伊人久久大香线蕉综合69 | 一级视频在线免费观看 | 91福利国产在线观看网站 | abc119影院成人免费看 | 欧美激情 在线 | 中文字幕在线观看亚洲 | 亚洲一二三区在线观看 | 在线另类 | 夜夜操天天 | 国产成人精品系列在线观看 | 色妞色综合久久夜夜 | 四虎影视永久在线精品免费播放 | 免费观看四虎精品成人 | 欧美日韩国产网站 | 黄网在线观看 | 国产小视频在线 | 欧美另类色 |