使用多个 .c 文件(并正确包含 header 文件)在终端和 VS 代码中编译。我这样做正确吗?
Compiling in terminal and in VS code with multiple .c files (and including header files correctly). Am I doing this correctly?
我想就 C 中的编译和 运行ning 程序做一些澄清。到目前为止,我主要使用单个 .c 文件,所以现在我正在尝试 运行 程序多个 .c 文件。我正在使用 gcc (mingw) Windows。
假设在同一个程序文件夹中有:
file.c
(函数定义)
header.h
(函数的原型)
main.c
在两个 .c 文件中,我都包含了 header 和 #include "header.h"
.
在终端中,我尝试编译一些由多个 .c 文件组成的程序,如上文所述:
gcc file.c main.c -o main
并且它正确地创建了 main.exe 文件和程序 运行 但是后来我尝试了另一个具有相同“结构”的程序并且我得到了指示 header 的错误消息找不到文件。所以我在命令行的末尾添加了 header 路径和 -I
命令,它再次工作正常。但我不知道为什么在这种情况下我需要指定 header 路径。
在 VS 代码中,我修改了 task.json 文件以编译我工作区中的所有 .c 文件 (${workspaceFolder}\*.c
) 并且还添加了 header 路径 (-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"
}
]
}
基本上我想知道我这样做是否正确,或者是否有 other/easier 种方法。
是的,实际上,如果你有很多文件,而不是用 gcc 手动输入它们,你可以做一个 Makefile。
https://github.com/kayofeld/makefile-gen :这是一个插件,可以自动生成包含所有规则的 Makefile 和目录中的文件。
但是,如果您想自己学习如何做,可以查看此站点:https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_makefiles.html
我想就 C 中的编译和 运行ning 程序做一些澄清。到目前为止,我主要使用单个 .c 文件,所以现在我正在尝试 运行 程序多个 .c 文件。我正在使用 gcc (mingw) Windows。 假设在同一个程序文件夹中有:
file.c
(函数定义)header.h
(函数的原型)main.c
在两个 .c 文件中,我都包含了 header 和 #include "header.h"
.
在终端中,我尝试编译一些由多个 .c 文件组成的程序,如上文所述:
gcc file.c main.c -o main
并且它正确地创建了 main.exe 文件和程序 运行 但是后来我尝试了另一个具有相同“结构”的程序并且我得到了指示 header 的错误消息找不到文件。所以我在命令行的末尾添加了 header 路径和 -I
命令,它再次工作正常。但我不知道为什么在这种情况下我需要指定 header 路径。
在 VS 代码中,我修改了 task.json 文件以编译我工作区中的所有 .c 文件 (${workspaceFolder}\*.c
) 并且还添加了 header 路径 (-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"
}
]
}
基本上我想知道我这样做是否正确,或者是否有 other/easier 种方法。
是的,实际上,如果你有很多文件,而不是用 gcc 手动输入它们,你可以做一个 Makefile。 https://github.com/kayofeld/makefile-gen :这是一个插件,可以自动生成包含所有规则的 Makefile 和目录中的文件。 但是,如果您想自己学习如何做,可以查看此站点:https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_makefiles.html