首页 > 解决方案 > 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
            }
        
        }
    ]
}

谢谢您的帮助。最好的问候汉斯

标签: cvisual-studio-code

解决方案


如果我是你,我会在 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 文件完成。


推荐阅读