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

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

3天內(nèi)不再提示

cmake學習的總結(jié)(一)

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

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

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

一、Cmake學習使用:

1、安裝Cmake管理工具:

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

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

Reading package lists... Done

Building dependency tree

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

這里先寫一個簡單的代碼工程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文件里面的內(nèi)容如下:

cmake_minimum_required (VERSION 2.8)

project (main)

add_executable(main main.c)

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

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

2、表示整個工程名為main

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

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

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里面的內(nèi)容是啥,很容易想到是用makefile的方式來實現(xiàn)對工程main的管理,這里我就不畫蛇添足把源代碼貼出來了。cmake_install.cmake 是一些相關(guān)配置選項:

# 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是一個文件夾,里面文件內(nèi)容如下:

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

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

    關(guān)注

    37

    文章

    1289

    瀏覽量

    103621
  • Makefile
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    19153
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

    VSCode中編譯過程cmake錯誤的原因?

    VSCode中編譯產(chǎn)生個問題,問題如下: CMake Error at CMakeLists.txt:1 (idf_component_register):Unknown CMake command
    發(fā)表于 06-06 06:48

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-如何移植NCNN?

    在計算機視覺和深度學習領(lǐng)域,NCNN(Netural Network Computer Vision)是個輕量級的神經(jīng)網(wǎng)絡計算框架,被廣泛應用于各類嵌入式設(shè)備和移動平臺。今天,讓我們同跟隨共創(chuàng)
    發(fā)表于 05-29 17:24

    飛凌嵌入式ElfBoard ELF 1板卡-如何移植NCNN

    在計算機視覺和深度學習領(lǐng)域,NCNN(Netural Network Computer Vision)是個輕量級的神經(jīng)網(wǎng)絡計算框架,被廣泛應用于各類嵌入式設(shè)備和移動平臺。今天,讓我們同跟隨共創(chuàng)
    發(fā)表于 05-29 08:53

    請問CMake和Make之間的區(qū)別有哪些?

    CMake和Make是構(gòu)建軟件,其工作涉及將源代碼轉(zhuǎn)換為可執(zhí)行程序。CMake和Make是旨在實現(xiàn)構(gòu)建過程自動化的工具,幫助開發(fā)者節(jié)省時間和精力。
    的頭像 發(fā)表于 02-27 11:44 ?1626次閱讀

    免費學習鴻蒙(HarmonyOS)開發(fā),些地址分享

    體系是怎么樣的,用學習路線圖總結(jié)如下: 上面是(略縮版),高清完整版可看主頁或點擊《鴻蒙4.0全套文檔》 鴻蒙的學習地址我們可以前往華為鴻蒙官方進行
    發(fā)表于 01-12 20:48

    Linux下如何使用CMake編譯程序

    今天分享篇關(guān)于 cmake 的相關(guān)文章,通過這個工具可以生成本地的Makefile。讓我們不用去編寫復雜的Makefile。
    的頭像 發(fā)表于 11-21 09:28 ?1461次閱讀
    Linux下如何使用<b class='flag-5'>CMake</b>編譯程序

    Windows下編譯工具CMake的安裝和最簡使用

    MCU的開發(fā)環(huán)境般在Windows操作系統(tǒng)上,簡單的工程般直接編寫Makefile文件后使用make工具構(gòu)建程序,復雜的工程般借助CMake來生成Makefile文件后使用mak
    的頭像 發(fā)表于 11-14 10:18 ?6810次閱讀
    Windows下編譯工具<b class='flag-5'>CMake</b>的安裝和最簡使用

    CMake構(gòu)建后的項目結(jié)構(gòu)解析

    、 CMake構(gòu)建后的項目結(jié)構(gòu)解析(Analysis of the Project Structure After CMake Build) 1.1 CMake構(gòu)建后的目錄結(jié)構(gòu)(Di
    的頭像 發(fā)表于 11-10 10:27 ?1707次閱讀
    <b class='flag-5'>CMake</b>構(gòu)建后的項目結(jié)構(gòu)解析

    在Linux下如何使用CMake編譯程序

    拿到其它平臺上使用,無需修改,非常方便。 本文主要講述在Linux下如何使用CMake來編譯我們的程序。 環(huán)境搭建 我使用的是ubuntu18.04,安裝cmake使用如下命令: sudo apt
    的頭像 發(fā)表于 11-08 16:15 ?5667次閱讀
    在Linux下如何使用<b class='flag-5'>CMake</b>編譯程序

    模型算法總結(jié)

    本文將繼續(xù)修煉回歸模型算法,并總結(jié)些常用的除線性回歸模型之外的模型,其中包括些單模型及集成學習器。 保序回歸、多項式回歸、多輸出回歸、多輸出K近鄰回歸、決策樹回歸、多輸出決策樹回
    的頭像 發(fā)表于 11-03 10:39 ?563次閱讀
    模型算法<b class='flag-5'>總結(jié)</b>

    全面總結(jié)機器學習中的優(yōu)化算法

    幾乎所有的機器學習算法最后都歸結(jié)為求個目標函數(shù)的極值,即最優(yōu)化問題,例如對于有監(jiān)督學習,我們要找到個最佳的映射函數(shù)f (x),使得對訓練樣本的損失函數(shù)最小化(最小化經(jīng)驗風險或結(jié)構(gòu)風
    發(fā)表于 11-02 10:18 ?380次閱讀
    全面<b class='flag-5'>總結(jié)</b>機器<b class='flag-5'>學習</b>中的優(yōu)化算法

    Vim指令總結(jié)

    對于未使用過 Vim 的朋友來說,可能還無法體會到這種感覺。由于使用 Vim 有定的學習成本,只有做到非常熟練的程度才能感受到它帶來的快捷。 這里我就自己日常有使用過的 Vim 指令做
    的頭像 發(fā)表于 11-01 10:15 ?530次閱讀