microsoft / microsoft/vscode-cpptools
Enable support for switching between different output targets with compile_commands.json
Nessuno ha ancora preso questa issue.
- 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


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
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- 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