如何使用visual studio代码编译多cpp文件?

Hu *_*rce 4 c++ g++ visual-studio-code

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

.ah 文件

    int func();
Run Code Online (Sandbox Code Playgroud)

a.cpp 文件

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

main.cpp 文件

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

Visual Studio 代码将使用如下命令

     g++ directory/main.cpp -o directory/main.out -g -Wall -fcolor-        diagnostics -std=c++11
Run Code Online (Sandbox Code Playgroud)

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

    g++ main.cpp a.cpp -o main.out.
Run Code Online (Sandbox Code Playgroud)

所以问题是如何配置这些 json 文件来修复 g++ 编译问题。当我想使用某些库(例如 FFMpeg)时,如何正确链接 FFMpeg .h 文件。

Om *_*Sao 8

在您的 VS Code 工作区目录中,将有一个.vscode目录,该目录下有tasks.json用于构建任务配置的目录。那里args改变"${file}""*.cpp"

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

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

在此输入图像描述

我发现这个视频对于解释所有这些细节非常有帮助:https://www.youtube.com/watch ?v=H76uhpnDZUk


小智 7

我让它工作的一种方法是进入你的构建任务,而不是说"g++ ${file}",相反,你可以设置目标文件进行编译,"g++ ${fileDirname}/**.cpp"因为它将编译目录中的所有 .cpp 文件。

通过这种方式,您可以对一个项目使用相同的构建任务,其中您可能在不同的文件夹中有多个程序,所有程序都在同一个伞形目录下。


Ala*_*les 6

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

g++ main.cpp a.cpp -o main.out
Run Code Online (Sandbox Code Playgroud)

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

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

  • Make - Linux 上的主要标准构建系统,但难以学习和繁琐
  • CMake - Visual Studio 代码对 cmake 有一些支持
  • Gyp - 可以生成make文件
  • Scons - python 之类的构建脚本


Rag*_*hav 5

这就是我在 MAC 上的 VSCodetasks.json 上的工作

{
    "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
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)