# Managing Component Backward Compatibility

A component that must build under both v1 and v2 can use the IDF_BUILD_V2 variable to run different CMake code under each build system. `IDF_BUILD_V2` is set when the component is evaluated under v2. You can use it to adjust small parts of an existing v1 component, or to include a completely separate `CMakeLists.txt` for v2. For the specific differences between v1 and v2 that may require this, see Breaking Changes.

Below is a component, `my_component`, whose `CMakeLists.txt` is adjusted to include and evaluate a separate v2 file, `CMakeLists_v2.txt`, when it is evaluated under v2.

Note

Most v1 components should work without modification under v2. This is only a simple, illustrative example of how `IDF_BUILD_V2` can be used to evaluate different `CMakeLists.txt` files for v1 and v2.

Adjusted `CMakeLists.txt`:

    if(IDF_BUILD_V2)
        # Include component CMake code for v2 and return.
        include(CMakeLists_v2.txt)
        return()
    endif()

    # Here follows the original component CMake code for v1.
    idf_component_register(SRCS "my_component.c"
                           PRIV_REQUIRES spi_flash
                           INCLUDE_DIRS "")

The `CMakeLists_v2.txt` for v2:

    idf_component_include(spi_flash)

    add_library(${COMPONENT_TARGET} STATIC
        "my_component.c"
    )

    target_include_directories(${COMPONENT_TARGET} PUBLIC
        "${CMAKE_CURRENT_LIST_DIR}"
    )

    target_link_libraries(${COMPONENT_TARGET} PRIVATE
        idf::spi_flash
    )

For more on writing a native v2 component, see Native CMake Component.

Was this page helpful?

- Thank you! We received your feedback.
- If you have any comments, fill in Espressif Documentation Feedback Form.

- We value your feedback.
- Let us know how we can improve this page by filling in Espressif Documentation Feedback Form.