我无法使用Visual Studio Code编译一个简单的愚蠢的演示“项目”。
在尝试丰富我的知识组合时,我尝试手动学习基础知识,也就是说,我尝试手动编译代码,否则Visual Studio Enterprise IDE会自动完成所有工作。因此,我决定在Mac + clang ++上使用Visual Studio Code进行简单的演示项目。
我的问题是:我有一个工作区。在此工作空间中,我有一些目录。这些称为“函数和标题”的目录之一再次包含目录:debug,release,include,src。在let run = 1;
//with initial value set
["a", "b", "c"].reduce((accumulator, item) => {
console.log(run++, accumulator, item);
}, "some initial value")
目录中,我有一个src
文件,其中包含两个虚拟方法:
functions.cpp
并在main.cpp中:
int add(int x, int y)
{
return x + y;
}
int subtract(int x, int y)
{
return x - y;
}
在我的#include "functions.h"
int main()
{
int x = add(1, 3);
int y = subtract(5,1);
return 0;
}
文件夹中,有两个方法声明:
include
有趣的一点是:当我进入int add(int x, int y);
int subtract(int x, int y);
并键入main.cpp
时,IntelliSense会找到#include "
并向我提出该文件。
此外,方法调用会正确突出显示。但是:在包含文件之后,Visual Studio Code将文件标记为已读,并说:找不到functions.h文件。
这是视觉Studio代码错误吗?因为我也看过设置,所以设置似乎还可以(参见图片)。
C语写道:
functions.h
我错过了什么还是做错了什么?我还在这里查看了其他类似的问题,但是没有任何帮助。
图片:
答案 0 :(得分:2)
的确。允许#include "functions.h"
自动完成的VSCode包含路径与通往编译器的有效路径无关。有两种解决方法:
由于您要包含functions.h
目录中的标头./src
,请尝试编写:
#include "../include/functions.h"
int main()
{
int x = add(1, 3);
int y = subtract(5,1);
return 0;
}
这应该有效。除非为编译器提供特定的包含路径,否则clang++
像大多数其他C ++编译器一样,将解释相对于源文件位置的路径。在这种情况下,它需要先进入一个目录,然后进入include
目录才能找到functions.h
头文件。
clang++
通过阅读clang++
手册页,可以确定-I
标志可用于指定编译器搜索以查找头文件的附加包含路径。因此,假设命令是从./
目录运行的,则从src
目录和项目的根目录中跳出一个命令:
clang++ src/main.cpp -I./include
还将解决当前的问题。