tasks.json
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "D:\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                // "${file}",
                //  "*.cpp", bug代码
                "${fileDirname}/*.cpp",  // 关键修改:编译当前目录下所有.cpp文件
                "-o",
                "${fileDirname}\\a.exe"
            ],
            "options": {
                "cwd": "D:\\mingw64\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}
        在 VSCode 中实现多文件编程(比如同时编译main.cpp、operator.cpp等多个.cpp文件),核心是修改tasks.json中编译命令的args参数,让编译器同时处理所有相关的源文件,而不是只编译当前打开的单个文件(${file})。
一、问题分析:当前配置的局限
你当前的tasks.json中,args里用了"${file}",这表示只编译当前正在编辑的单个.cpp文件 (比如只编译main.cpp,而不包含operator.cpp)。多文件编程时,函数实现可能在其他.cpp文件中(如operator.cpp),如果不把这些文件加入编译列表,链接时就会出现 "未定义的引用" 错误(就像你之前遇到的my_add/my_div找不到的问题)。
二、修改方案:让编译器编译所有.cpp文件
将args中的"${file}"替换为"${fileDirname}/*.cpp",表示 "编译当前文件所在目录下的所有.cpp文件"。修改后的tasks.json如下:
json
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "D:\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",  // 彩色输出编译信息(可选)
                "-g",  // 生成调试信息(调试必备)
                "${fileDirname}/*.cpp",  // 关键修改:编译当前目录下所有.cpp文件
                "-o",  // 指定输出文件
                "${fileDirname}\\a.exe"  // 输出可执行文件路径(当前目录下的a.exe)
            ],
            "options": {
                "cwd": "D:\\mingw64\\bin"  // 编译器所在目录(保持不变)
            },
            "problemMatcher": [
                "$gcc"  // 识别gcc的错误输出(保持不变)
            ],
            "group": {
                "kind": "build",
                "isDefault": true  // 设为默认构建任务(按Ctrl+Shift+B直接执行)
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}
        三、关键修改说明
- 
"${fileDirname}/*.cpp"的作用:${fileDirname}是 VSCode 的内置变量,表示 "当前打开文件所在的目录"(比如D:\VSCode source code\test2);/*.cpp表示 "该目录下所有以.cpp结尾的文件"(比如main.cpp、operator.cpp都会被包含)。
这样修改后,编译命令会自动变成:
bash
g++.exe -g D:\VSCode source code\test2\*.cpp -o D:\VSCode source code\test2\a.exe所有
.cpp文件都会被编译并链接到一起,函数实现就不会找不到了。 - 
为什么不直接用
"*.cpp"? 如果你只写"*.cpp",编译器可能会在cwd指定的目录(D:\mingw64\bin)下找.cpp文件,而不是你的代码目录,导致找不到文件。加上${fileDirname}可以准确定位到你的代码所在目录,避免路径错误。 
四、扩展场景:如果文件分布在子目录中?
如果你的代码分散在多个子目录(比如src/main.cpp、src/utils/tool.cpp),可以用"${workspaceFolder}/**/*.cpp"替代,其中:
${workspaceFolder}表示 "整个项目根目录";**表示 "递归匹配所有子目录"。
修改后会编译项目中所有目录(包括子目录)的.cpp文件:
json
"args": [
    // ...其他参数不变
    "${workspaceFolder}/**/*.cpp",  // 编译项目中所有.cpp文件(包括子目录)
    "-o",
    "${fileDirname}\\a.exe"
]
        五、使用方法
修改后,在 VSCode 中打开项目中的任意.cpp文件(比如main.cpp),按Ctrl+Shift+B执行构建任务,编译器会自动编译所有.cpp文件并生成a.exe,多文件之间的函数调用就能正常链接了。
总结:多文件编程的核心是 "让编译器找到所有.cpp文件",通过${fileDirname}/*.cpp或${workspaceFolder}/**/*.cpp可以轻松实现,避免手动列举每个文件(尤其是文件数量多的时候)。