ESP 32クイックエントリー(四):CMakeおよび分解esp-idfにおけるhello_worldエンジニアリング構造
5507 ワード
一.CMakeの概要
CMakeはプラットフォーム間でのインストール(コンパイル)ツールであり、すべてのプラットフォームのインストール(コンパイルプロセス)を簡単な文で記述することができます.彼は様々なmakefileやprojectファイルを出力することができ、コンパイラがサポートするC++の特性をテストすることができ、UNIXのautomakeのようなものです.
二.CMakeの例と構文
次に、私が選択したCMakeコードの例を示します.
これにより、対応するCMake構文をまとめることができます. 三.Esp-idfでhello_worldプロジェクト構造の概要
esp-idfのhelloを開きますworldエンジニアリング、端末を開き、
次のように見えます. それから私たちは工事構造に関する書類を一つ一つ出して討論することができます.
1.
書類の内容は以下の通りです.
これはCMakeがロードしたプロファイルで、まず
2.
書類の内容は以下の通りです.
3.
四.プロジェクト構造の要点の総括と展望
本稿の探索を通して、以下の要点をまとめることができます. に保存されます. を復元するために使用できます.
最後に、より大きなプロジェクトでは、プロジェクトにcomponentsディレクトリが存在することがわかります.以下は私が検索したポイントです.componentsディレクトリでは設定せず、構築システムは自動的にIDFからPATHディレクトリはcomponentソースコードを呼び出し、使用するcomponentをプロジェクトディレクトリにコピーする場合.構築システムは現在のディレクトリの下のcomponentを使用し、IDF_に影響しません.PATHのソースコード. Kconfigを使用してmenuconfigのオプションを宣言し、インタフェースを介してコンポーネントのマクロ定義をインタラクティブに変更できます.component.mkは、コンポーネントの様々な動作を構成するために使用されます.
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エンジニアリング、端末を開き、
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.txt
はmain
コンポーネントの構成をコンパイルするために使用され、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.mk
mainコンポーネントをコンパイルするために使用され、空のファイルであることがわかります.この場合、ディレクトリのすべてのコードがデフォルトでコンパイルされます.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.old
、sdkconfig.defaults
を自動的に生成します.この2つのファイルは、前回の設定またはデフォルト設定main
プロジェクトの主要なソースファイルをディレクトリに配置します.このディレクトリは、「擬似コンポーネント」として公式に定義され、コンポーネントディレクトリと同じコンパイルルールに従います.最後に、より大きなプロジェクトでは、プロジェクトにcomponentsディレクトリが存在することがわかります.以下は私が検索したポイントです.