Zdefiniuj reguły CMake

Wyświetl źródło na GitHubie

System kompilacji CMAKE korzysta z plików CMakeLists.txt, które definiują cele kompilacji. CMakeLists.txt w katalogu głównym repozytorium to wierzchołek drzewa kompilacji i stanowi dobre miejsce do definiowania różnych celów, opcji i makr używanych podczas procesu kompilacji.

Pierwsze wartości do zdefiniowania to nazwa projektu i obsługiwane platformy.

W tym przykładzie ustawiliśmy nazwę projektu na ot-efr32 w wersji 0.0.1. Określamy też zmienną EFR32_PLATFORM_VALUES, która zawiera listę efr32 platform obsługiwanych przez ot-efr32. W tym przykładzie zdefiniowaliśmy wiele platform, ale jedna z nich ma zmienną _PLATFORM_VALUES.

cmake_minimum_required(VERSION 3.10.2)
project(ot-efr32 VERSION 0.0.1)

set(EFR32_PLATFORM_VALUES
    "efr32mg1"
    "efr32mg12"
    "efr32mg13"
    "efr32mg21"
)

Plik CMakeLists.txt zawiera kontrolę, która przerywa kompilacje uruchomione na nieobsługiwanych platformach.

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()

Kolejną zmienną, którą trzeba zdefiniować, jest OT_PLATFORM_LIB. Ta zmienna jest używana przez przykładowe aplikacje OpenThread do łączenia się z Twoją platformą.

set(OT_PLATFORM_LIB "openthread-${EFR32_PLATFORM}")

Opcje tworzenia kodu OpenThread

Różne funkcje OpenThread można włączyć, wyłączyć lub skonfigurować, definiując zmienne CMake.

Na platformie ot-efr32 używana jest zewnętrzna biblioteka 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})

Zdefiniuj katalogi wyjściowe

Katalog wyjściowy dla różnych plików docelowych możesz skonfigurować za pomocą zmiennych poniżej.

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)