Skip to content

Broken launch.json with multiple targets #15

@Rimpampa

Description

@Rimpampa

I have a project that is structured in this way:

project/
├── target-1/
│   ├── ...
│   └── target-1.ioc
├── target-2/
│   ├── ...
│   └── target-2.ioc
├── ...
└── CMakeLists.txt

Where the CMakeLists.txt file contains something like this:

include(cubemx.cmake/cubemx.cmake)

project(project)

add_executable(target-1)
cubemx_target(
    TARGET target-1
    CUBEMX_SOURCE_DIR target-1
    FLASH_TARGET_NAME target-1-flash
    IOC "${CMAKE_CURRENT_LIST_DIR}/target-1/target-1.ioc"
)

...

add_executable(target-2)
cubemx_target(
    TARGET target-2
    CUBEMX_SOURCE_DIR target-2
    FLASH_TARGET_NAME target-2-flash
    IOC "${CMAKE_CURRENT_LIST_DIR}/target-2/target-2.ioc"
)

...

The problem with this configuration is that the .vscode/launch.json is (kinda) broken because it contains the configuration for only one of the targets.


The problem is that vscode-debug.cmake for every configured target, it replaces the entire contents of that file, overwriting any previously saved configuration.

What it should do instead is to overwrite only the entries of the "configurations" JSON array object that have the same name of the selected targets.


This is obviously much more difficult to implement, given that (IIRC) there is no JSON support to CMake and that it's not a trivial operation. One of the edge cases I can think of is removing a target, that would leave the configuration for that target untouched, which means that the user would have to delete it manually.

There is also the fact that this type of project structure can probably be changed for a better one or that I've missed something that could make this work without any changes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions