# CMakeLists.txt file for STM32 project setup compilation using VS code

**URL:** https://discourse.cmake.org/t/cmakelists-txt-file-for-stm32-project-setup-compilation-using-vs-code/9728
**Category:** Code
**Created:** [December 28, 2023, 9:38am UTC](https://discourse.cmake.org/t/cmakelists-txt-file-for-stm32-project-setup-compilation-using-vs-code/9728 "2023-12-28T09:38:19Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![sridhar](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/s/9fc29f/32.png) [@sridhar](https://discourse.cmake.org/u/sridhar)
#### Post date: [December 28, 2023, 9:38am UTC](https://discourse.cmake.org/t/cmakelists-txt-file-for-stm32-project-setup-compilation-using-vs-code/9728/1 "2023-12-28T09:38:19Z")

</div>

```cmake
cmake_minimum_required (VERSION 3.0.0)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER arm-none-eabi-as)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_LINKER arm-none-eabi-ld)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=cortex-m4 -mthumb -mno-thumb-interwork -mfpu=fpv4-sp-d16 -mfloat-abi=hard")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=cortex-m4 -mthumb -mno-thumb-interwork -mfpu=fpv4-sp-d16 -mfloat-abi=hard")
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -mcpu=cortex-m4 -mthumb -mno-thumb-interwork -mfpu=fpv4-sp-d16 -mfloat-abi=hard")
 
project (Test)
set(STM32CUBE_HAL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Drivers/STM32G0xx_HAL_Driver")
set(STM32CUBE_CMSIS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Drivers/CMSIS")
set(FREERTOS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Middlewares/Third_Party/FreeRTOS")
file(GLOB SRC_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/Src/*.c
    ${CMAKE_CURRENT_SOURCE_DIR}/Src/lin/*.c
    ${CMAKE_CURRENT_SOURCE_DIR}/Src/lcd/*.c
    ${CMAKE_CURRENT_SOURCE_DIR}/Src/eacp/*.c
    ${STM32CUBE_HAL_PATH}/Src/*.c
    ${FREERTOS_PATH}/Source/*.c
    ${FREERTOS_PATH}/Source/portable/MemMang/*.c
    ${FREERTOS_PATH}/Source/portable/GCC/ARM_CM0/*.c
    ${FREERTOS_PATH}/Source/CMSIS_RTOS_V2/*.c
)
file(GLOB INC_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/Inc
    ${CMAKE_CURRENT_SOURCE_DIR}/Inc/lin
    ${CMAKE_CURRENT_SOURCE_DIR}/Inc/lcd
    ${CMAKE_CURRENT_SOURCE_DIR}/Inc/eacp
    ${STM32CUBE_HAL_PATH}/Inc
    ${STM32CUBE_HAL_PATH}/Inc/Legacy
    ${STM32CUBE_CMSIS_PATH}/Include
    ${STM32CUBE_CMSIS_PATH}/Device/ST/STM32G0xx/Include
    ${FREERTOS_PATH}/Source/include
    ${FREERTOS_PATH}/Source/portable/GCC/ARM_CM0
    ${FREERTOS_PATH}/Source/CMSIS_RTOS_V2
)
add_executable (Test ${SRC_FILES})
target_include_directories(Test PUBLIC ${INC_FILES})
target_link_libraries(Test -Wl,--start-group -lgcc -lc -lm -lrdimon -Wl,--end-group  
)
target_compile_definitions(Test PRIVATE __SOFTFP__ )
set_target_properties(Test PROPERTIES SUFFIX ".elf")
add_custom_command(TARGET Test POST_BUILD
    COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:Test> ${CMAKE_CURRENT_BINARY_DIR}/Test.hex
    COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:Test> ${CMAKE_CURRENT_BINARY_DIR}/Test.bin
)

```

We need to have a similar kind of source, include & libraries path to compile code for respective microcontroller project. Here STM32 uses cortex M4 and so used the respective flags. These flags are altered correspondingly with respect to microcontrollers involved.

---

<div class="post-metadata">

### Author: ![ben.boeckel](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/b/ea5d25/32.png) [@ben.boeckel](https://discourse.cmake.org/u/ben.boeckel)
#### Post date: [January 11, 2024, 2:06pm UTC](https://discourse.cmake.org/t/cmakelists-txt-file-for-stm32-project-setup-compilation-using-vs-code/9728/2 "2024-01-11T14:06:51Z")

</div>

I formatted the provided CMake code to get highlighting.

Is there a question here?
