VSコードコンパイルfile not found問題
最近visual studio codeを使用する場合、c++コードを記述するには、サードパーティのヘッダファイルを以下に示すように導入する必要があることが多い.
ただし、これらのヘッダファイルのパスがデフォルトの検索パス(/usr/includeまたは/usr/local/include)にない場合、コンパイル時にエラーが報告され、「file not found」と提示されます.ネット検索の多くの方法では、c_cpp_properties.jsonを変更し、includePathに対応するパスを追加すればよいのです(shift+command+p、C/C++:Edit Configurationsを選択すると開きます).しかし実際のテストでは、includePathにパスを追加しても同じエラーが報告されることがわかりました.個人的にはこの場所のincludePathを疑っていますが、実際にtaskのpathに追加されていません.
テストの結果、ヘッダファイルに絶対パスを指定したり、パスをokにしたい場合は、以下のようになります.
しかし、ヘッダファイルのアドレスが変更されると、コードを変更する必要があり、非常に面倒です.したがって、拡張ヘッダファイルを表示する検索パスを実現するために、プロファイルを変更する必要があります.
taskを修正することができます.jsonは(shift+command+p,Tasks:Configure Task)を実現し、ここでは私自身のテストを例に挙げます.
ここでは、「-I」、「/Users/ws/project/c/local」を追加して、指定したヘッダファイルの検索パスを表示します.このプロファイルは、次のコマンドを自動的に実行することに相当します.
g++コマンドを使用してコンパイルする場合、-Iは「Add directory to include search path」を表し、検索パスを指定します.これにより,このtask構成を再利用してコンパイルを行うと,「file not found」という問題は発生せず,解決する.
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
//
ただし、これらのヘッダファイルのパスがデフォルトの検索パス(/usr/includeまたは/usr/local/include)にない場合、コンパイル時にエラーが報告され、「file not found」と提示されます.ネット検索の多くの方法では、c_cpp_properties.jsonを変更し、includePathに対応するパスを追加すればよいのです(shift+command+p、C/C++:Edit Configurationsを選択すると開きます).しかし実際のテストでは、includePathにパスを追加しても同じエラーが報告されることがわかりました.個人的にはこの場所のincludePathを疑っていますが、実際にtaskのpathに追加されていません.
テストの結果、ヘッダファイルに絶対パスを指定したり、パスをokにしたい場合は、以下のようになります.
//
#include "../../local/rapidjson/document.h"
//
#include "/home/user/cpp/local/rapidjson/document.h"
しかし、ヘッダファイルのアドレスが変更されると、コードを変更する必要があり、非常に面倒です.したがって、拡張ヘッダファイルを表示する検索パスを実現するために、プロファイルを変更する必要があります.
taskを修正することができます.jsonは(shift+command+p,Tasks:Configure Task)を実現し、ここでは私自身のテストを例に挙げます.
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "ws-test",
"type": "shell",
"command": "g++",
"args": [
"-Wall","-std=c++11", "-g",
"main.cpp",
"DocumentTest.cpp","DocumentTest.h",
"CppTest.cpp","CppTest.h",
"-I", "/Users/ws/project/c/local"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$gcc"
],
"isShellCommand": true,
}
]
}
ここでは、「-I」、「/Users/ws/project/c/local」を追加して、指定したヘッダファイルの検索パスを表示します.このプロファイルは、次のコマンドを自動的に実行することに相当します.
g++ -Wall -std=c++11 -g main.cpp DocumentTest.cpp DocumentTest.h CppTest.cpp CppTest.h -I /Users/ws/project/c/local
g++コマンドを使用してコンパイルする場合、-Iは「Add directory to include search path」を表し、検索パスを指定します.これにより,このtask構成を再利用してコンパイルを行うと,「file not found」という問題は発生せず,解決する.