c++ - 如何向 task.json 添加多个包含路径?
问题描述
我正在尝试调试此存储库:MP-SPDZ,其中许多.h
,.hpp
和.cpp
文件放置在各种文件夹中。此外,在每个.cpp
文件中,都包含几个头文件。
这里更清楚的是文件树的样子:
>ProjectTP
>Machines
-mascot-party.cpp
-SPDZ.cpp
-SPDZ.hpp
-Player-Online.cpp
-Player-Online.hpp
-more files ...
>Processor
-Machine.h
-Machine.hpp
-more files ...
>More folders ...
请注意,在某些情况下,.hpp
文件被视为.h
文件,而在其他情况下,它们被视为.cpp
文件。问题是当我尝试编译项目时,VS Code 找不到标头,而我将所有包含路径添加到task.json
.
这是我的主.cpp
文件,它位于根目录(mascot-party.cpp)
中的一个文件夹中。Machines
#include "Player-Online.hpp"
#include "Math/gfp.hpp"
#include "GC/TinierSecret.h"
int main(int argc, const char** argv)
{
ez::ezOptionParser opt;
return spdz_main<Share<gfp>, Share<gf2n>>(argc, argv, opt);
}
这Player-Online.hpp
是包含在(mascot-party.cpp)
(只是为了显示存储库的嵌套方式)
#include "Processor/Machine.h"
#include "Processor/OnlineOptions.h"
#include "Math/Setup.h"
#include "Protocols/Share.h"
#include "Tools/ezOptionParser.h"
#include "Networking/Server.h"
#include <iostream>
#include <map>
#include <string>
#include <stdio.h>
using namespace std;
template<class T, class U>
int spdz_main(int argc, const char** argv, ez::ezOptionParser& opt, bool live_prep_default = true)
...
return 0;
}
这是我的task.json
:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-g",
"${workspaceFolder}/Machines/mascot-party.cpp",
//"${workspaceFolder}/Machines/SPDZ.cpp",
"${workspaceFolder}/Tools/*.cpp",
"${workspaceFolder}/Math/*.cpp",
"${workspaceFolder}/OT/*.cpp",
"${workspaceFolder}/Networking/*.cpp",
"${workspaceFolder}/Processor/*.cpp",
"${workspaceFolder}/Protocols/*.cpp",
"${workspaceFolder}/Machines/*.hpp",
"${workspaceFolder}/Tools/*.hpp",
"${workspaceFolder}/Math/*.hpp",
"${workspaceFolder}/OT/*.hpp",
"${workspaceFolder}/Processor/*.hpp",
"${workspaceFolder}/Protocols/*.hpp",
"-Idir",
"${workspaceFolder}/Processor",
"${workspaceFolder}/Tools",
"${workspaceFolder}/Math",
"${workspaceFolder}/OT",
"${workspaceFolder}/Networking",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: /usr/bin/g++"
}
]
}
我的c_cpp_properties.json
:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/g++",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
重要说明:当我将绝对路径放入我的 .cpp 文件(例如,而不是#include "Processor/Machine.h"
I put #include "/home/user/MP-SPDZ_VSCode/Processor/Machine.h"
)中时,它会找到标题。但是,存储库很大,无法以这种方式修复它。
我尝试了很多不同的配置这么久,但没有结果。任何帮助表示赞赏。谢谢你。
解决方案
该文件可能c_cpp_properties.json
不是设置include
目录的正确位置。根据其参考:
includePath
包含路径是一个文件夹,其中包含源文件中包含的头文件(例如#include "myHeaderFile.h"
)。指定 IntelliSense 引擎在搜索包含的头文件时使用的路径列表。
所以很可能这仅用于智能感知。
在我看来,最安全的选择是在编译器命令中指定包含路径,您已经在task.json
. 在属性中args
尝试添加参数-Idir
,然后添加包含目录的目录的路径Processor
:
"args": [
...
"-Idir",
"${fileDirname}/../dir-that-contains-the-Processor-dir
...
]
推荐阅读
- python - 如何在 SQLAlchemy 中使用通配符?
- regex - 查找带有连字符的 ID 格式的正则表达式
- python - 将字符串合并在一起直到出现一个符号
- android - 从活动中获取片段数据的最佳方式
- python - Python-请求:网站不接受登录请求
- android - 如何在 Kotlin 中更改按钮的位置和尺寸
- python - 是否可以仅扩展 django 中的部分模板?
- java - 在 Swing BorderLayout 的侧面板中设置最小宽度
- linux - 如何使用示例(Ubuntu)编译点云库(PCL)?
- elasticsearch - Elasticsearch,在私有 IP 上发布