【问题标题】:Compiling in terminal and in VS code with multiple .c files (and including header files correctly). Am I doing this correctly?使用多个 .c 文件(并正确包含头文件)在终端和 VS 代码中编译。我这样做正确吗?
【发布时间】:2021-08-24 14:17:45
【问题描述】:

我想对在 C 中编译和运行程序进行一些澄清。到目前为止,我主要使用单个 .c 文件,所以现在我尝试运行具有多个 .c 文件的程序。我在 Windows 上使用 gcc (mingw)。 假设在同一个程序文件夹中有:

  • file.c(函数定义)
  • header.h(函数原型)
  • main.c

在两个 .c 文件中,我都包含了带有 #include "header.h" 的标题。

在终端中,我尝试编译一些由多个 .c 文件组成的程序,如上所述:

gcc file.c main.c -o main

它创建了 main.exe 文件并且程序正确运行,但随后我尝试使用另一个具有相同“结构”的程序,我收到错误消息,表明找不到头文件。所以我在命令行末尾添加了带有-I 命令的标题路径,它再次运行良好。但我不知道为什么在这种情况下我需要指定标头路径。

在 VS 代码中,我修改了 task.json 文件以编译工作区 (${workspaceFolder}\\*.c) 中的所有 .c 文件,还添加了头文件路径 (-I${workspaceFolder}),它工作正常。所以task.json看起来像这样:(有一些意大利语短语,我正在使用安装在CodeBlocks文件夹中的gcc)。

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe compila il file attivo",
            "command": "D:\\CodeBlocks\\MinGW\\bin\\gcc.exe",
            "args": [
                "-g",
                "${workspaceFolder}\\*.c", 
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "-I${workspaceFolder}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "compilatore: D:\\CodeBlocks\\MinGW\\bin\\gcc.exe"
        }
    ]
}

基本上我想知道我这样做是否正确,或者是否有其他/更简单的方法可以做到这一点。

【问题讨论】:

  • 使用构建工具:Make、CMake、MSBuild、Blaze、.....

标签: c json gcc visual-studio-code header


【解决方案1】:

实际上,如果你有很多文件,而不是用 gcc 手动输入它们,你可以做一个 Makefile。 https://github.com/kayofeld/makefile-gen :这是一个插件,可以自动生成您的 Makefile,其中包含您目录中的所有规则和文件。 但是,如果你想自己学习如何做,你可以查看这个网站:https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_makefiles.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2012-05-15
    • 1970-01-01
    相关资源
    最近更新 更多