c - VS 代码错误:生成多个输出文件时无法指定 -o
问题描述
我是 VS Code 和 C 的血腥初学者(实际上我什么都不知道)。但我有一个目标。我希望 - 有一天 - 能够从 IAU SOFA 编译 C 文件。但在我必须学习如何编译之前。为此,我将 Mac clang 编译器安装到 VS Code 中(我现在也可以将其用于 Python)。我创建了四个简单的文件:hellocopy.c、hello.c、myheader.h 和 tasks.json。我告诉 VS Code 用 shift 命令 B 编译。
我得到了错误:
开始构建... /usr/bin/clang -g /Users/widmerhans/projects/Eigene_C_Programme/*.c /Users/widmerhans/projects/Eigene_C_Programme/Myheader/*.h -o /Users/widmerhans/projects/Eigene_C_Programme/ hellocopy clang:错误:生成多个输出文件时无法指定 -o 构建完成但出现错误。终端进程启动失败(退出代码:-1)。
hellocopy.c:
#include <stdio.h>
#include "myheader.h"
int main(){
int age;
printf("Enter age\n");
scanf("%d", &age);
printf("age is %d", age);
hello();
return 0;
}
你好ç:
#include <stdio.h>
#include "myheader.h"
void hallo() {
printf("Hallo World\n");
}
我的头文件.h:
#ifndef MYHEADER_H
#define MYHEADER_H
#define PI (3.1416)
// extern int meineVariable;
// extern int meineFunktion1(int);
// extern int meineFunktion2(char);
extern void hello();
#endif /* MYHEADER_H */
任务.json:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: clang build C files",
"command": "/usr/bin/clang",
"args": [
"-g",
"${fileDirname}/*.c",
"${fileDirname}/Myheader/*.h",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
谢谢您的帮助。最好的问候汉斯
解决方案
如果我是你,我会在 VS Code 中下载并使用 CMake 扩展。您还必须下载 CMake。然后像这样设置你的文件夹:
/project /* whatever you name it, home of CMakeLists.txt */
/project/build /* this is where you executable will be */
/project/include /*headers go in here */
/project/src /*source files go in here */
然后将其用作您的 CMakeLists.txt 文件...
// cmake_minimum_required(VERSION 3.20.3)
// project(TEMPLATE VERSION 0.1.0 LANGUAGES C)
// set(CMAKE_C_STANDARD 11)
// set(CMAKE_C_STANDARD_REQUIRED ON)
// set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
// include_directories(include)
// file(GLOB SOURCES "src/*.c")
// add_compile_options(-Wall -Werror -Wextra -Wpedantic)
// add_executable(TEMPLATE ${SOURCES})
// install(TARGETS TEMPLATE RUNTIME DESTINATION bin)
只需将 CMake 版本更改为您下载到系统上的版本,然后将单词更改为TEMPLATE
您想要命名项目的任何名称(需要进行 3 次更改)。
通过这种方式 CMake 为您管理一切,您可以专注于学习 C 语言。安装 CMake 扩展和 CMake 本身后,您可以使用 ctrl shift p 并键入 CMake 访问 VS Code 中的 CMake 命令,即: ctrl f5 运行调试等。
这就是我让项目进行的工作,当然您可以随着项目的增长而修改 CMakeLists.txt 文件,但这会使其继续运行并可以在 Vim 中与 YouCompleteMe 一起使用,或者您想要使用的任何支持 CMake 的 IDE(我使用 KDevelop 和 Vim)。这是 Linux 上 VS Code 中的 CMake 资源:https ://code.visualstudio.com/docs/cpp/cmake-linux
注意:我不得不使用评论在这里发布 CMakeLists.txt 文件的内容,我不会在这里发布很多答案,因为我不是 C 程序员,只是一个业余爱好者。但这就是我所做的,它让我编码......
编辑:哦,我想我应该补充一下——如果你这样做,你不必担心维护 VS Code 生成的各种 .JSON 文件,一切都通过 CMakeLists.txt 文件完成。
推荐阅读
- angularjs - 如何在angularjs的剑道网格中修复我的api
- java - 变量未初始化
- javascript - 如果您打开这个网站 (netu.tv),它会破坏检查器。有没有办法绕过这个并下载“受保护”的视频?
- r - 在 scatter3D() 中使用颜色渐变
- r - `sjPlot::tab_model()` 汇总统计数据重新排序和拆分 R-squared 和 R-squared-adjusted
- c# - 使用自定义 API 单点登录
- javascript - 使用谷歌地址自动完成时,角度反应形式的值不会更新
- php - 每页帖子不限制查询中的帖子
- c - 为什么在这个 Linux 内核代码中截断参数?
- python - numpy 在矩阵数组上应用函数