Skip to content

Fresh out of the box errors with pico_sdk_init.cmake #476

@neurothoughtmachine

Description

@neurothoughtmachine

EDIT: This is for a windows 10 build using G++ (without MinGW-w64).
If I can't get G++ to work (without MinGW-w64) then I use MSVC.

Fresh out of the box errors...

I installed VSCode a few days ago.
After having to add the following line ...

# set cmake dir
set (PICO_SDK_PATH "/picosdk/sdk")

... to my CMakeLists.txt

... and ...

#cmake version
cmake_minimum_required(VERSION 4.12 VERSION 3.31.6-msvc6)

... to my CMakeLists.txt.

These are the next errors:

[main] Configuring project: blink_example_c
[proc] Executing command: "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE --no-warn-unused-cli -S "C:/Learning Projects/MS Code/blink_example_c" -B "c:/Learning Projects/MS Code/blink_example_c/build" -G "NMake Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] CMake Error at C:/picosdk/sdk/external/pico_sdk_import.cmake:109 (get_filename_component):
[cmake] get_filename_component unknown component BASE_DIR
[cmake] Call Stack (most recent call first):
[cmake] CMakeLists.txt:8 (include)
[cmake]
[cmake]
[cmake] -- Configuring incomplete, errors occurred!
[proc] The command: "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE --no-warn-unused-cli -S "C:/Learning Projects/MS Code/blink_example_c" -B "c:/Learning Projects/MS Code/blink_example_c/build" -G "NMake Makefiles" exited with code: 1

MSVCode points to a error in line 9:
`add_library(_pico_sdk_pre_init_marker INTERFACE)

I haven't changed anything to pico_sdk_init.cmake
Below is a copy of the file.

# Pre-initialize the Raspberry Pi Pico SDK, setting up the platform and toolchain and some CMake utility functions
# This file must be included prior to the project() call

# Note: this file is perhaps named badly, as it provides a method pico_sdk_init which
# the enclosing project calls LATER to actually "initialize" the SDK (by including the CMakeLists.txt from this
# same directory)

if (NOT TARGET _pico_sdk_pre_init_marker)
    add_library(_pico_sdk_pre_init_marker INTERFACE)  # Exception has occurred <<<----------

    function(pico_is_top_level_project VAR)
        string(TOLOWER ${CMAKE_CURRENT_LIST_DIR} __list_dir)
        string(TOLOWER ${CMAKE_SOURCE_DIR} __source_dir)
        if (__source_dir STREQUAL __list_dir)
            set(${VAR} 1 PARENT_SCOPE)
        else()
            set(${VAR} 0 PARENT_SCOPE)
        endif()
    endfunction()

    function(pico_message_debug MESSAGE)
        # The log-level system was added in CMake 3.15.
        if(${CMAKE_VERSION} VERSION_LESS "3.15.0")
            message(${MESSAGE})
        else()
            message(DEBUG ${MESSAGE})
        endif()
    endfunction()

    if (NOT PICO_SDK_PATH)
        set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR})
    endif ()

    get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")

    set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)

    list(APPEND CMAKE_MODULE_PATH ${PICO_SDK_PATH}/cmake)

    include(${CMAKE_CURRENT_LIST_DIR}/pico_sdk_version.cmake)
    include(pico_utils)

    message("PICO_SDK_PATH is ${CMAKE_CURRENT_LIST_DIR}")
    macro(pico_sdk_init)
        if (NOT CMAKE_PROJECT_NAME)
            message(WARNING "pico_sdk_init() should be called after the project is created (and languages added)")
        endif()
        add_subdirectory(${PICO_SDK_PATH} pico-sdk)
    endmacro()

    macro(add_sub_list_dirs var)
        foreach(LIST_DIR IN LISTS ${var})
            get_filename_component(SHORT_NAME "${LIST_DIR}" NAME)
            pico_message_debug("Including custom CMakeLists.txt ${SHORT_NAME}")
            add_subdirectory(${LIST_DIR} ${SHORT_NAME})
        endforeach()
    endmacro()

    macro(add_sub_list_files var)
        foreach(LIST_FILE IN LISTS ${var})
            pico_message_debug("Including custom CMake file ${LIST_FILE}")
            include(${LIST_FILE})
        endforeach()
    endmacro()

    macro(pico_register_common_scope_var NAME)
        if (NOT ${NAME} IN_LIST PICO_PROMOTE_COMMON_SCOPE_VARS)
            list(APPEND PICO_PROMOTE_COMMON_SCOPE_VARS ${NAME})
        endif()
    endmacro()

    set(PICO_PROMOTE_COMMON_SCOPE_VARS
            PICO_INCLUDE_DIRS
            PICO_SDK_POST_LIST_DIRS
            PICO_SDK_POST_LIST_FILES
            PICO_CONFIG_HEADER_FILES
            PICO_RP2040_CONFIG_HEADER_FILES
            PICO_BOARD_CMAKE_OVERRIDES
    )

    macro(pico_promote_common_scope_vars)
        set(PICO_PROMOTE_COMMON_SCOPE_VARS ${PICO_PROMOTE_COMMON_SCOPE_VARS} PARENT_SCOPE)
        foreach(VAR IN LISTS PICO_PROMOTE_COMMON_SCOPE_VARS)
            SET(${VAR} ${${VAR}} PARENT_SCOPE)
        endforeach()
    endmacro()

    include(pico_pre_load_platform)

    # We want to configure correct toolchain prior to project load
    # todo perhaps this should be included by the platform instead?
    include(pico_pre_load_toolchain)
endif()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions