如何使用Visual Studio代码编译多cpp文件?

时间:2018-08-07 07:04:34

标签: c++ visual-studio-code g++

我已经按照一些说明来构建Visual Studio代码C / C ++编译和调试环境。但是g ++编译器只能编译所选的cpp文件,因此无法编译与cpp文件关联的.h文件。然后终端显示“体系结构x86_64的未定义符号”错误。代码如下:

a.h文件

    int func();

a.cpp文件

    include <iostream>
    include "a.h"
    using namespace std;
    int func(){
        return 111;
    }

main.cpp文件

    include "a.h"
    using namespace std;
    int main()
    {
        int b = func();
        cout << b << endl;
    }

Visual Studio代码将使用以下命令

     g++ directory/main.cpp -o directory/main.out -g -Wall -fcolor-        diagnostics -std=c++11

此命令将引发“体系结构x86_64的未定义符号”错误 我可以使用此新命令来修复它

    g++ main.cpp a.cpp -o main.out.

所以问题是如何配置这些json文件来解决g ++编译问题。当我想使用FFMpeg之类的库时,如何正确链接FFMpeg .h文件。

4 个答案:

答案 0 :(得分:1)

在VS Code工作空间目录中,将存在.vscode目录,在该目录下将存在tasks.json,用于进行构建任务配置。 在args中将"${file}"更改为"*.cpp"

这将在VS代码编辑器中编译打开文件目录下的所有.cpp文件。

基本上,command参数是arg,它正在创建用于编译文件并生成可执行文件的命令。请注意。

enter image description here

我发现该视频对解释所有此类详细信息非常有帮助:https://www.youtube.com/watch?v=H76uhpnDZUk

答案 1 :(得分:0)

对于非常简单的项目,您可以简单地通过单个命令将多个cpp文件传递给编译器,例如:

g++ main.cpp a.cpp -o main.out

您可以简单地将task.json中的编译命令更改为该值。

但是随着项目的发展,您会发现这种方法会给您带来越来越多的问题。我建议您研究一个合适的构建系统,其中包括很多选择:

  • Make-Linux上的主要标准构建系统,但学习和学习都很困难
  • CMake-Visual Studio代码对cmake有所支持
  • Gyp-可以生成制作文件
  • Scons-类似python的构建脚本

答案 2 :(得分:0)

使它起作用的一种方法是进入构建任务,而不是说"g++ ${file}",而是可以将目标文件设置为要编译为"g++ ${fileDirname}/**.cpp",这将编译所有目录中的.cpp文件。

这样,您可以对一个项目使用相同的构建任务,在该项目中,您可能在不同的文件夹中有多个程序,这些程序都在同一个目录下。

答案 3 :(得分:0)

这就是我在VSCode task.json上在MAC上为我工作的原因

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "clang++ - Build and debug active file",
            "command": "/usr/bin/clang++",
            "args": [
                "-g",
                "${fileDirname}/**.cpp",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}