IntelliSenseはc_cpp_properties.json >> includePathを使用して自動補完のヘッダーを検索しますが、ビルドするtask.json >> tasks >> args内にインクルードパスを指定する必要があることにまだ気づきました。
ドキュメントで、includePathが「-I」で指定するパスとほぼ同じであることがわかりました。
この設定に指定するパスは、-Iスイッチを介してコンパイラに送信するパスと同じです。ソースファイルが解析されると、IntelliSenseエンジンは、#includeディレクティブで指定されたファイルにこれらのパスを付加して、解決を試みます。これらのパスは再帰的に検索されません。*
これが私のc_cpp_properties.jsonの例です。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"D:/github/dependencies/SDL2-2.0.8/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"${workspaceFolder}/**"
]
}
}
],
"version": 4
}
そしてtask.json:
{
// See https://go.Microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "Shell",
"command": "g++",
"args": [
"-g",
"main2.cpp",
"-ID:\\github\\dependencies\\SDL2-2.0.8\\include",
"-LD:\\github\\dependencies\\SDL2-2.0.8\\lib\\x64",
"-lSDL2main","-lSDL2", "-lopengl32",
"-o",
"test-sdl"
]
}
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher":"$gcc"
}
簡単な質問ですが、VSCodeは初めてです(申し訳ありません)。
私もライブラリを使用しようとしましたが、少なくとも今のところこれは機能します(私はWindows BTWを使用しています):c_cpp_properties.jsonに、includeディレクトリへの参照があります。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"C:\\ProgrammingLibraries\\SDL2-2.0.10\\include\\SDL2",
"${workspaceFolder}\\src\\include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin\\gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
そして、tasks.jsonには、A CompilationタスクとLinkerタスク、および両方を実行するタスクがあります。
{
// See https://go.Microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Compiler",
"type": "Shell",
"command": "g++",
"args": [
"-c",
"${workspaceFolder}\\src\\main.cpp",
"-IC:\\ProgrammingLibraries\\SDL2-2.0.10\\include\\SDL2"
]
},
{
"label": "Linker",
"type": "Shell",
"command": "g++",
"args": [
"${workspaceFolder}\\main.o",
"-o",
"${workspaceFolder}\\bin\\HelloSDL.exe",
"-LC:\\ProgrammingLibraries\\SDL2-2.0.10\\lib",
"-lmingw32",
"-lSDL2main",
"-lSDL2"
]
},
{
"label": "Build HelloSDL",
"dependsOn": [
"Compiler",
"Linker"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
これは、OpenGL "GLWF"および "glad"ライブラリをclangを使用してMac(MacBook Pro 2015、macOS Catalina)のVSコードに組み込んだ方法です。そして私にはインテリセンスがあり、ビルドとデバッグができます。
include/glad/glad.h
-含めるライブラリファイル
src/helloworld.cpp-メインファイル
/* Ask for an OpenGL Core Context */
#define GLFW_INCLUDE_GLCOREARB
#include <GLFW/glfw3.h>
#include <glad/glad.h>
#define BUFFER_OFFSET(i) ((char *)NULL + (i))
int main(int argc, char **argv)
{
GLFWwindow *window;
/* Initialize the library */
if (!glfwInit())
{
return -1;
}
#ifdef __Apple__
/* We need to explicitly ask for a 3.2 context on OS X */
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#endif
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(1280, 720, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the buffers
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
.vscode/c_cpp_properties.json
{
"configurations": [
{
"name": "Mac",
"includePath": ["${workspaceFolder}/src/", "${workspaceFolder}/include/"],
"defines": [],
"macFrameworkPath": [
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks"
],
"compilerPath": "/usr/bin/clang",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "${default}",
"browse": {
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 4
}
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) Launch",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/build/helloworld.out",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
.vscode/tasks.json(ヘッダーだけでなく、実装ファイルinclude/glad.c
を含める必要があります)
{
"version": "2.0.0",
"tasks": [
{
"label": "Build with Clang",
"type": "Shell",
"command": "clang++",
"args": [
"-std=c++17",
"-stdlib=libc++",
"-lglfw3",
"--include-directory=include/",
"--include=include/glad.c",
"-framework",
"OpenGL",
"-framework",
"IOKit",
"-framework",
"Cocoa",
"src/helloworld.cpp",
"-o",
"build/helloworld.out",
"--debug"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}