CMake 建構系統會依賴 CMakeLists.txt
檔案來定義建構目標。存放區根目錄的 CMakeLists.txt
是建構樹狀結構的最上層,也是開始定義建構過程中所使用的各種目標、選項和巨集的絕佳位置。
要定義的第一個值是專案名稱和支援的平台。
在這個範例中,我們將專案名稱設為 ot-efr32
,並將版本設為 0.0.1
。我們也會定義變數 EFR32_PLATFORM_VALUES
,這是 ot-efr32
支援的 efr32
平台清單。為了簡化這個範例,我們定義了多個平台,但 _PLATFORM_VALUES
變數的單一平台也沒問題。
cmake_minimum_required(VERSION 3.10.2) project(ot-efr32 VERSION 0.0.1) set(EFR32_PLATFORM_VALUES "efr32mg1" "efr32mg12" "efr32mg13" "efr32mg21" )
CMakeLists.txt
檔案包含檢查,以在不支援的平台上啟動版本。
set_property(CACHE EFR32_PLATFORM PROPERTY STRINGS ${EFR32_PLATFORM_VALUES}) if(NOT EFR32_PLATFORM IN_LIST EFR32_PLATFORM_VALUES) message(FATAL_ERROR "Please select a supported platform: ${EFR32_PLATFORM_VALUES}") endif()
下一個需要定義的變數是 OT_PLATFORM_LIB
。OpenThread 範例應用程式會使用這個變數來連結您的平台。
set(OT_PLATFORM_LIB "openthread-${EFR32_PLATFORM}")
OpenThread CMake 選項
您可以透過建立 CMake 變數來啟用/停用/設定 OpenThread 中的多項功能。
在 ot-efr32
平台上,系統會使用外部 mbedTLS 程式庫 silabs-mbedtls
。
set(OT_BUILTIN_MBEDTLS_MANAGEMENT OFF CACHE BOOL "disable builtin mbedtls management" FORCE) set(OT_EXTERNAL_MBEDTLS "silabs-mbedtls" CACHE STRING "use silabs mbedtls" FORCE) set(OT_MBEDTLS ${OT_EXTERNAL_MBEDTLS})
定義輸出目錄
您可以使用以下變數設定不同目標檔案的輸出目錄。
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
將 OpenThread 新增至建構樹狀結構
如要在建構樹狀結構中加入 openthread
子模組,請按照下列步驟操作:
add_subdirectory(openthread)
將建構屬性傳送至 OpenThread
這個檔案的最後一個部分可讓您定義可能會新增至 openthread
建構樹狀結構和平台程式庫的建構屬性 (例如定義、選項和包含目錄)。
要加入這些定義,最簡單的方法是使用 ot-config
目標。這個目標僅為單一用途目標,用來定義設定,且與 openthread
中幾乎所有 CMake 目標的連結。
# Define config filename macros target_compile_definitions(ot-config INTERFACE OPENTHREAD_CONFIG_FILE="openthread-core-efr32-config.h" OPENTHREAD_PROJECT_CORE_CONFIG_FILE="openthread-core-efr32-config.h" OPENTHREAD_CORE_CONFIG_PLATFORM_CHECK_FILE="openthread-core-efr32-config-check.h" ) # Disable -Wshadow and -Wpedantic target_compile_options(ot-config INTERFACE -Wno-shadow -Wno-pedantic ) # Add platform dirs to "include" dirs target_include_directories(ot-config INTERFACE ${PROJECT_SOURCE_DIR}/src/src ${PROJECT_SOURCE_DIR}/src/${EFR32_PLATFORM} ${PROJECT_SOURCE_DIR}/src/${EFR32_PLATFORM}/crypto )
在建構樹狀結構中新增子目錄
現在已定義頂層設定,現在請在建構樹狀結構中加入其他子目錄。
src
資料夾就是平台抽象層原始碼的所在位置。third_party
資料夾內含任何第三方程式碼。
如果您想要在存放區中加入範例應用程式,請建立 examples
資料夾,並將資料夾新增至建構樹狀結構。
add_subdirectory(src) add_subdirectory(third_party) # Optional add_subdirectory(examples)
src
目錄
這是存放區的核心,也是平台抽象層的實作位置。另外還有一些其他必要檔案。
src/arm-none-eabi.cmake
這是一個工具鍊檔案,用於定義 CMake 在建構程序中使用的一些變數。建議您複製這個檔案的 ot-efr32
版本,然後配合您的平台進行修改。
src/CMakeLists.txt
您可以在這裡定義平台程式庫的來源檔案、包含路徑和編譯器旗標。如果存放區僅支援單一平台,這個檔案的良好範例就是來自 ot-cc2538
。
您可以在單一存放區中支援多個平台,也可以使用多個平台存放區做為參考資料。請參閱 ot-efr32 和 ot-nrf528xx。