Visual Studio Code C++ 包含路径[重复]

问题描述 投票:0回答:1

我们是经验丰富的 C++ 开发人员。我们已经使用 Visual Studio 多年,但我们绝对无法让 Visual Studio Code 查看我们的外部头文件文件夹。

我们可以编译并运行一个简单的单文件 C++ 程序,但是一旦我们尝试包含外部标头,它就会给我们带来可怕的“没有这样的文件或目录”错误。

我们安装了 Microsoft C/C++ 扩展。我们已经安装了 g++ 编译器并位于我们的路径中。而且,就像我说的,它可以很好地编译单个文件 C++ 程序。我们没有做任何花哨的事情:

Just the beginning of the source

我们手动在c_cpp_properties.json文件中添加了外部头的路径:

"includePath": [
    "${workspaceFolder}/**",
    "C:/special_api/**"
],

我们收到错误。然后我们使用 C/C++ 配置 GUI:

How it looks in the C/C++ Configurations GUI

我们收到错误。

我们交换了斜杠,因为 Windows 有时会出现问题:

"includePath": [
    "${workspaceFolder}/**",
    "C:\\special_api\\**"
],

但是无论我们做什么,我们都会收到此错误:

C:\Work Area\cpp-experiment\HelloWorld.cpp:2:10: fatal error: experiment.h: No such file or directory
#include "experiment.h"
      ^~~~~~~~~~~~~~
compilation terminated.

Build finished with error(s).
The terminal process terminated with exit code: -1.

我什至没有看到它在编译命令中指定包含文件夹的位置:

C:\Tools\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin\g++.exe -g "C:\Work Area\cpp-experiment\HelloWorld.cpp" -o "C:\Work Area\cpp-experiment\HelloWorld.exe"

虽然我不得不承认,我不是一个 C++ 命令行编译专家;我通常只使用 IDE,让它处理复杂的命令。

我们知道头文件是有效的,因为当我们将其移动到与 .cpp 文件相同的文件夹时,它工作得很好。当它位于外部文件夹中时,VSC 就找不到它。

当然,我们已经阅读了文档,但它们对这个特定问题的帮助不大。有谁知道如何让 Visual Studio Code 识别外部头文件路径?

c++ visual-studio-code
1个回答
2
投票

您需要编写一个任务来进行构建。 该任务通常会运行一个 makefile,您可以在其中指定构建选项,包括编译器搜索路径。 VSCODE 不会为你做这个。

任务示例

    {
        "label": "make PDG",
        "options": {
            "cwd": "${workspaceFolder}/../../PelexDataGraph"
        },
        "command": "mingw32-make.exe",
        "args": [
            "pdg"
        ],
        "group": "build",
        "problemMatcher": [
            "$gcc"
        ]
    },

makefile 示例

#source file search paths
VPATH = ../../src ../../src/ext ../../PeakParams2 \
    ../../PelexDataGraph

# compiler include search paths
INCS=-I../../src -I../../src/ext \
    -I../../pelexMixer \
    -I../../../windex/include -I../../../boost/boost1_72

# libraries required by linker
LIBS=-lstdc++fs  -lgdiplus -lgdi32 -lcomdlg32 -lws2_32 -lwsock32

# folder for .o files
ODIR=./obj

# PPE sources
_OBJppe = PeakParameterEditor.o \
cPPEForm.o cValues.o cChannelFilterEditor.o \
cDetectorConfig.o cGroup.o cMixerUIClient.o \
Widgets.o \
Configure.o cPeakFilterSet.o ChannelLabels.o \
raven_sqlite.o sqlite3.o
OBJppe = $(patsubst %,$(ODIR)/%,$(_OBJppe))

# PDG sources
_OBJpdg = PelexDataGraph.o
OBJpdg = $(patsubst %,$(ODIR)/%,$(_OBJpdg))

$(ODIR)/sqlite3.o: sqlite3.c
    gcc  -c -o $@ $<
$(ODIR)/%.o: %.cpp
    g++   -std=c++17 -c -o $@ $< $(INCS)

ppe: $(OBJppe) 
    g++ -o ../../bin/PeakParameterEditor.exe $^ $(INCS) $(LIBS)

pdg: $(OBJpdg) 
    g++ -o ../../bin/PelexDataGraph.exe $^ $(LIBS)
© www.soinside.com 2019 - 2024. All rights reserved.