Visual Studio 代码:C++ 包含路径
Visual Studio Code: C++ include path
我目前正在使用 https://marketplace.visualstudio.com/items?itemName=mitaki28.vscode-clang,这是一个很棒的访问成员函数的小工具。
但是,我在导入的项目中遇到一个问题。虽然上面的 clang 功能有效,但我在使用包含目录时遇到了特殊问题。我的项目结构如下:
|- src/
|- main.cpp
|- include/
|- MyHelper.h
|- CMakeLists.txt
有没有办法在 Visual Studio 代码中配置我的包含目录,以便在 main.cpp
中我可以这样做:
#include "MyHelper.h"
而不是 #include "include/MyHelper.h"?
在编辑器中,它突出显示了我的包含声明,说它无法找到该文件。虽然编辑器没什么大不了的(我的项目可以编译),但随后的问题是 vscode-clang 插件不起作用,因为它看不到文件。
也许甚至让它在编辑器中使用我的 CMakeLists.txt 的配置来进行必要的包含?
谢谢!
好吧,这很愚蠢,但万一有人使用 Visual Studio Code
并且没有琐碎的项目。这些说明假设您使用的是 clang 编译器:
- 打开你的项目目录
- 打开
.vscode/settings.json
在 JSON 对象内部配置以下行:
// Compiler options for C++ (e.g. ['-std=c++11'])
"clang.cxxflags": [
"-I/path/to/my/include/directory" // header files
],
如果您使用的是 CMake,VSCode 有 CMake 插件可以帮助您构建项目。所以你不需要修改settings.json。只需使用:
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")
或者如果没有其他模块使用该文件夹中的头文件,您可以使用类似的东西:
target_include_directories(MyHelper, "${CMAKE_CURRENT_SOURCE_DIR}/include")
如果只需要项目构建成功。这就是整个故事。
在这种情况下,您会在 #include 语句下看到一些小的绿色锯齿线,这会伤害您的眼睛。您需要生成 c_cpp_properties.json。它与帮助编译器构建代码无关,而是帮助VSCode intellisense 实现库和头文件的存在。同样,您可以通过在 CMakeLists.txt:
中添加 CMake 选项来利用 CMake
add_definitions(-DCMAKE_EXPORT_COMPILE_COMMANDS=ON)
CMake 将在您的构建目录下生成一个文件 compile_commands.json
。 VSCode 能够解析 Json 文件并根据该文件中的内容找到包含路径。所以你需要做的只是让 VSCode 知道 Json 文件在哪里。您可以通过在 c_cpp_properties.json:
中添加以下行来做到这一点
"configurations": [
{
"name": "Mac",
"compileCommands": "${workspaceFolder}/build/compile_commands.json",
...
}],
重建项目将使 VSCode 智能感知找到所有必要的路径。
[环境]
Ubuntu: 16.04.3
VSCode: 1.23.1
VSCode 插件:C/C++ 0.17.0,CMAKE 0.0.17,CMakeTools 0.11.1
我不知道我是否迟到了。我在 tasks.json
文件中添加了 arg。其实和第一个答案一样,但是在vscode中,我们可以做得更容易。
在 C++ 中,使用 g++ -g foo.cpp -o foo -I /path/to/include/dir
添加头文件。
我们知道,在vscode中,tasks.json
是使用运行 bash命令,但是可以使用一些像${fileDirname}
这样的别名,你知道,文件目录名:)
无论如何,task.json
:
{
"tasks": [
{
"type": "shell",
"label": "g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/out/${fileBasenameNoExtension}",
"-I",
"${fileDirname}/../Include/"
],
"options": {
"cwd": "/usr/bin"
}
}
],
"version": "2.0.0"
}
我目前正在使用 https://marketplace.visualstudio.com/items?itemName=mitaki28.vscode-clang,这是一个很棒的访问成员函数的小工具。
但是,我在导入的项目中遇到一个问题。虽然上面的 clang 功能有效,但我在使用包含目录时遇到了特殊问题。我的项目结构如下:
|- src/
|- main.cpp
|- include/
|- MyHelper.h
|- CMakeLists.txt
有没有办法在 Visual Studio 代码中配置我的包含目录,以便在 main.cpp
中我可以这样做:
#include "MyHelper.h"
而不是 #include "include/MyHelper.h"?
在编辑器中,它突出显示了我的包含声明,说它无法找到该文件。虽然编辑器没什么大不了的(我的项目可以编译),但随后的问题是 vscode-clang 插件不起作用,因为它看不到文件。
也许甚至让它在编辑器中使用我的 CMakeLists.txt 的配置来进行必要的包含?
谢谢!
好吧,这很愚蠢,但万一有人使用 Visual Studio Code
并且没有琐碎的项目。这些说明假设您使用的是 clang 编译器:
- 打开你的项目目录
- 打开
.vscode/settings.json
在 JSON 对象内部配置以下行:
// Compiler options for C++ (e.g. ['-std=c++11']) "clang.cxxflags": [ "-I/path/to/my/include/directory" // header files ],
如果您使用的是 CMake,VSCode 有 CMake 插件可以帮助您构建项目。所以你不需要修改settings.json。只需使用:
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")
或者如果没有其他模块使用该文件夹中的头文件,您可以使用类似的东西:
target_include_directories(MyHelper, "${CMAKE_CURRENT_SOURCE_DIR}/include")
如果只需要项目构建成功。这就是整个故事。
在这种情况下,您会在 #include 语句下看到一些小的绿色锯齿线,这会伤害您的眼睛。您需要生成 c_cpp_properties.json。它与帮助编译器构建代码无关,而是帮助VSCode intellisense 实现库和头文件的存在。同样,您可以通过在 CMakeLists.txt:
中添加 CMake 选项来利用 CMakeadd_definitions(-DCMAKE_EXPORT_COMPILE_COMMANDS=ON)
CMake 将在您的构建目录下生成一个文件 compile_commands.json
。 VSCode 能够解析 Json 文件并根据该文件中的内容找到包含路径。所以你需要做的只是让 VSCode 知道 Json 文件在哪里。您可以通过在 c_cpp_properties.json:
"configurations": [
{
"name": "Mac",
"compileCommands": "${workspaceFolder}/build/compile_commands.json",
...
}],
重建项目将使 VSCode 智能感知找到所有必要的路径。
[环境]
Ubuntu: 16.04.3
VSCode: 1.23.1
VSCode 插件:C/C++ 0.17.0,CMAKE 0.0.17,CMakeTools 0.11.1
我不知道我是否迟到了。我在 tasks.json
文件中添加了 arg。其实和第一个答案一样,但是在vscode中,我们可以做得更容易。
在 C++ 中,使用 g++ -g foo.cpp -o foo -I /path/to/include/dir
添加头文件。
我们知道,在vscode中,tasks.json
是使用运行 bash命令,但是可以使用一些像${fileDirname}
这样的别名,你知道,文件目录名:)
无论如何,task.json
:
{
"tasks": [
{
"type": "shell",
"label": "g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/out/${fileBasenameNoExtension}",
"-I",
"${fileDirname}/../Include/"
],
"options": {
"cwd": "/usr/bin"
}
}
],
"version": "2.0.0"
}