ESP 32クイックエントリー(四):CMakeおよび分解esp-idfにおけるhello_worldエンジニアリング構造

5507 ワード

一.CMakeの概要
CMakeはプラットフォーム間でのインストール(コンパイル)ツールであり、すべてのプラットフォームのインストール(コンパイルプロセス)を簡単な文で記述することができます.彼は様々なmakefileやprojectファイルを出力することができ、コンパイラがサポートするC++の特性をテストすることができ、UNIXのautomakeのようなものです.
二.CMakeの例と構文
次に、私が選択したCMakeコードの例を示します.
[cpp] view plain copy
#project name  
PROJECT(test_math)  
#head file path  
INCLUDE_DIRECTORIES(  include  )  
#source directory  
AUX_SOURCE_DIRECTORY(src DIR_SRCS)  
#set environment variable  
SET(TEST_MATH  ${DIR_SRCS}  )  
#set extern libraries  
SET(LIBRARIES  libm.so  )  
#add executable file  
ADD_EXECUTABLE(../bin/bin ${TEST_MATH})  
#add link library  
TARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES}  

これにより、対応するCMake構文をまとめることができます.
  • PROJECT( project name )工事名称
  • INCLUDE_DIRECTORIES( include )ヘッダファイル所在経路
  • SET( TEST_DIR ${DIR_SRCS})環境変数の設定
  • SET(LIBRARIES libm.so)外部ライブラリの設定
  • ADD_EXECUTABLE( ../bin/bin ${TEST_DIR})実行可能ファイルパスの設定
  • TARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES})リンクライブラリの設定
  • ADD_SUBDIRECTORYコードサブディレクトリの設定
  • 三.Esp-idfでhello_worldプロジェクト構造の概要
    esp-idfのhelloを開きますworldエンジニアリング、端末を開き、cdコマンドを使用してesp-idf/examples/get-started/hello_worldに入り、端末でtreeを使用してこのプロジェクトの現在の構造を表示します.
    ├── CMakeLists.txt
    ├── main
    │   ├── CMakeLists.txt
    │   ├── component.mk
    │   └── hello_world_main.c
    ├── Makefile
    ├── README.md
    ├── sdkconfig
    └── sdkconfig.old
    

    次のように見えます.
  • CMakeLists.txt(CMakeプロファイル)
  • main(エンジニアリングマスターディレクトリ)
  • CMakeLists.txt(mainフォルダ下のCMakeプロファイル)
  • component.mk(mainコンポーネントのプロファイル)
  • hello_world_main.c(hello_worldの主なコード)
  • Makefile(makeプロファイル)
  • README.md
  • sdkconfig(make menuconfigで生成されたプロファイル)
  • sdkconfig.old(make menuconfigで生成されたバックアッププロファイル)
  • それから私たちは工事構造に関する書類を一つ一つ出して討論することができます.
    1. CMakeLists.txt
    書類の内容は以下の通りです.
    # The following lines of boilerplate have to be in your project's
    # CMakeLists in this exact order for cmake to work correctly
    cmake_minimum_required(VERSION 3.5)
    
    include($ENV{IDF_PATH}/tools/cmake/project.cmake)
    project(hello-world)
    

    これはCMakeがロードしたプロファイルで、まずcmake_minimum_required(VERSION 3.5)によってCMakeがサポートする最小バージョンが定義されます.次に、include($ENV{IDF_PATH}/tools/cmake/project.cmake)を使用してesp-idfの下のproject.cmakeファイルを含みます.このファイルにはロードする必要があるコンポーネントがたくさん含まれています.深く理解したい場合は、自分で確認してください.最後にproject(hello-world)を用いて工事名hello-worldを説明する.
    2. Makefile
    書類の内容は以下の通りです.
    #
    # This is a project Makefile. It is assumed the directory this Makefile resides in is a
    # project subdirectory.
    #
    
    PROJECT_NAME := hello-world
    
    include $(IDF_PATH)/make/project.mk
    
    
    Makefileファイルはmakeコマンドでロードされたプロファイルであり、内容はCMakeLists.txtとほぼ一致し、PROJECT_NAME := hello-world説明エンジニアリング名はhello-worldであり、include $(IDF_PATH)/make/project.mkはesp-idfの下のproject.cmakeファイルを含むために使用される.
    3. main mainフォルダは、プロジェクトのプライマリソースファイルを配置するために使用されます.この工事には3つの書類があります.それぞれ:
  • CMakeLists.txtファイルの内容は以下の通りです:
    set(COMPONENT_SRCS "hello_world_main.c")
    set(COMPONENT_ADD_INCLUDEDIRS "")
    
    register_component()
    
    CMakeLists.txtmainコンポーネントの構成をコンパイルするために使用され、set(COMPONENT_SRCS "hello_world_main.c")set(COMPONENT_ADD_INCLUDEDIRS "")は関連するソースコードの位置を設定するために使用され、最後にregister_component()を通じてコンポーネントを登録することができます.
  • component.mkファイルの内容は以下の通りです:
    #
    # "main" pseudo-component makefile.
    #
    # (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)
    
    component.mkmainコンポーネントをコンパイルするために使用され、空のファイルであることがわかります.この場合、ディレクトリのすべてのコードがデフォルトでコンパイルされます.
  • hello_world_main.cこのファイルの内容は構築工事とは関係ないため、以下のように省略します:
    #include 
    #include "freertos/FreeRTOS.h"
    #include "freertos/task.h"
    #include "esp_system.h"
    #include "esp_spi_flash.h"
    
    void app_main()
    {
    	printf("Hello world!
    "); }
    hello_world_main.cはプロジェクトの比較核心のファイルで、私たちは中でコードを修正して私たちの関連需要を満たすことができます.

  • 四.プロジェクト構造の要点の総括と展望
    本稿の探索を通して、以下の要点をまとめることができます.
  • Makefileファイルはプロジェクトのルートディレクトリに置くべきで、一般的にこのファイルのあるディレクトリはコンパイルシステムによって自動的にPROJECT_NAME
  • に保存されます.
  • sdkconfigファイルはmake menuconfigによって自動的に生成され、兄弟ディレクトリはsdkconfig.oldsdkconfig.defaultsを自動的に生成します.この2つのファイルは、前回の設定またはデフォルト設定
  • を復元するために使用できます.
  • mainプロジェクトの主要なソースファイルをディレクトリに配置します.このディレクトリは、「擬似コンポーネント」として公式に定義され、コンポーネントディレクトリと同じコンパイルルールに従います.

  • 最後に、より大きなプロジェクトでは、プロジェクトにcomponentsディレクトリが存在することがわかります.以下は私が検索したポイントです.
  • componentsディレクトリでは設定せず、構築システムは自動的にIDFからPATHディレクトリはcomponentソースコードを呼び出し、使用するcomponentをプロジェクトディレクトリにコピーする場合.構築システムは現在のディレクトリの下のcomponentを使用し、IDF_に影響しません.PATHのソースコード.
  • Kconfigを使用してmenuconfigのオプションを宣言し、インタフェースを介してコンポーネントのマクロ定義をインタラクティブに変更できます.component.mkは、コンポーネントの様々な動作を構成するために使用されます.