c++ 如何使用visual studio代码编译多cpp文件?[duplicate]

3pvhb19x  于 2023-03-20  发布在  其他
关注(0)|答案(4)|浏览(276)

此问题在此处已有答案

(17个答案)
16天前关闭。
我已经按照一些说明构造了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文件?

cdmah0mi

cdmah0mi1#

我让它工作的一种方法是进入构建任务,而不是说"g++ ${file}",相反,您可以设置目标文件编译为"g++ ${fileDirname}/**.cpp",这将编译目录中的所有.cpp文件。
这样,您就可以对一个项目使用相同的生成任务,在该项目中,您可能在不同的文件夹中有多个程序,所有这些程序都在同一个伞式目录下。

4bbkushb

4bbkushb2#

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

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

您可以简单地将tasks.json中的编译命令更改为这个值。
然而随着项目的发展,你会发现这种方法会给你带来越来越多的问题。我建议你寻找一个合适的构建系统,有很多可供选择,包括:

  • Make -Linux上的主要标准构建系统,但很难学习和熟练
  • CMake - visual studio代码对cmake有一些支持
  • Gyp -可以生成make文件
  • Scons -类似Python的构建脚本
fiei3ece

fiei3ece3#

在VS代码工作区目录中,将有.vscode目录,在该目录下将有用于构建任务配置的tasks.json。在args中,将"${file}"更改为"*.cpp"
这将编译您在VS代码编辑器中打开的文件所在目录下的所有.cpp文件。
基本上是command参数,它是arg,创建一个命令,编译一个文件,并生成它的可执行文件,注意。

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

lndjwyie

lndjwyie4#

这就是我在MAC上对VSCode tasks.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
            }
        }
    ]
}

相关问题