在 mac 上使用 vscode 编译多个 c++ 文件

Compiling mutiple c++ files with vscode on mac

我对 c++ 和一般编程还很陌生,正在观看 freecodecamp.org youtube 频道上的免费教程,当我到了使用多个 c++ 文件的地步时,我得到了多个编译器g++ 和 clang 错误。

这里是main.cpp

#include <iostream>
#include "compare.h" 



int main(){

    int maximum = max(134,156);
    std::cout << "max : " << maximum << std::endl;

    

    
    return 0;
}

这是compare.cpp:

int max( int a, int b){
    if(a>b)
        return a;
    else
        return b;
}

和 compare.h 文件

    int max( int a, int b);//Declaration

当我尝试使用 clang 进行构建时,我得到:

Undefined symbols for architecture arm64: "max(int, int)", referenced from: _main in main-e30ba6.o ld: symbol(s) not found for architecture arm64 clang-13: error: linker command failed with exit code 1 (use -v to see invocation)

当我使用 g++ 构建时,我得到:

Undefined symbols for architecture arm64: "__Z3maxii", referenced from: _main in cc3V4eOt.o ld: symbol(s) not found for architecture arm64 collect2: error: ld returned 1 exit statu

我搜索了整个 youtube 和堆栈溢出,我找到的唯一解决方案是 link 带有

的文件
g++ main.cpp compare.cpp -o main

但这只奏效了一次,再也没有了。 任何帮助将不胜感激,谢谢!

编辑

经过更多的研究,唯一给我一个明确答案的是用 clang 构建,得到错误,然后 运行:

clang++ main.cpp compare.cpp -o main

但我每次更改代码时都必须这样做,这看起来很乏味,必须有更好的方法。另外,如果我有多个 .cpp 文件,我也必须 运行 将它们添加到命令中。

您可以通过快捷方式在 VScode 中构建多个 cpp 文件。

  1. 按照documentation
  2. 创建构建任务
  3. 更新 tasks.json 以支持构建多个 cpp 文件:
{
  // See https://go.microsoft.com/fwlink/?LinkId=733558
  // for the documentation about the tasks.json format
  "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "C/C++: clang++ build active file",
      "command": "/usr/bin/clang++",
      "args": [
        "-std=c++17",
        "-g",
        "${workspaceFolder}/*.cpp",
        "-o",
        "${fileDirname}/main"
      ],
      "options": {
        "cwd": "${workspaceFolder}"
      },
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "Task generated by Debugger."
    }
  ]
}
  1. 使用命令 Tasks: Run build task 或快捷方式构建。