在 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 文件。
- 按照documentation
创建构建任务
- 更新
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."
}
]
}
- 使用命令
Tasks: Run build task
或快捷方式构建。
我对 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 文件。
- 按照documentation 创建构建任务
- 更新
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."
}
]
}
- 使用命令
Tasks: Run build task
或快捷方式构建。