microsoft / microsoft/vscode-cpptools

Enable support for switching between different output targets with compile_commands.json

Aperta
#10,508 5 commenti 6 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Feature Request Feature: Configuration Language Service
Lingua principale
TypeScript
Stelle
6.2k
Fork
1.7k
Merge medio
14h 46m
PR unite (30g)
61

Descrizione

    Hi @sean-mcmanus 

Here is a minimal example of this scenario

main.cpp

#include <iostream>

void func1()
{
#ifdef TARGET_1
    std::cout << "Target 1" << std::endl;
#elif defined(TARGET_2)
    std::cout << "Target 2" << std::endl;
#else
    std::cout << "Other" << std::endl;
#endif
}

int main()
{
    func1();
    return 0;
}

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/bin/g++",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "linux-gcc-x64",
            "compileCommands": ".vscode/compile_commands.json"
        }
    ],
    "version": 4
}

compile_commands.json

[
    {
        "file": "/home/karim/test/main.cpp",
        "directory": "/home/karim/test/build",
        "arguments": [
            "g++",
            "-c",
            "-o",
            "b.o",
            "-DTARGET_2",
            "/home/karim/test/main.cpp"
        ],
        "output": "/home/karim/test/build/b.o"
    },
    {
        "file": "/home/karim/test/main.cpp",
        "directory": "/home/karim/test/build",
        "arguments": [
            "g++",
            "-c",
            "-o",
            "a.o",
            "-DTARGET_1",
            "/home/karim/test/main.cpp"
        ],
        "output": "/home/karim/test/build/a.o"
    }
]

Note that "output" field is used to distinguish between different processing modes (output file) of the same source file as documented by the Json Compilation Database Specification

compile_commands_1

compile_commands_2

Originally posted by @KarimAshraf1995 in https://github.com/microsoft/vscode-cpptools/discussions/10408#discussioncomment-4893606

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia tracciando il modo in cui vengono selezionate le voci di compile_commands.json per un file sorgente, usando come esempio comportamentale le due voci per main.cpp e i relativi campi output. Verifica in che modo c_cpp_properties.json collega il database di compilazione a IntelliSense. Il lavoro è completato quando l’estensione è in grado di distinguere e passare tra le modalità di elaborazione TARGET_1 e TARGET_2, invece di trattare un comando come canonico.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
cpp, vscode
Ambito
devtools
Tipo di issue
Funzionalità
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
38/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.