所以给定三个文件:
主文件
#include <stdio.h>
void printFunc(*char);
主程序
#include "main.h"
int main(){
printFunc("Hello World\n");
return 0;
}
打印函数
#include "main.h"
void printFunc(char *string){
printf("%s", string);
return;
}
您可以在 linux 机器上使用 gcc 进行编译,如下所示:
gcc -g -Wall -c file1.c //compile but do not link file
gcc -g -Wall -c file2.c //same
gcc file1.o file2.o -o main //executable "main"
或者
gcc -g -Wall file1.c file2.c -o main
但我很关心头文件是如何被包含进来的。当我注意到一些教程会做这样的事情时,我在创建“makefile”时遇到了这个问题:
main : main.o printFunc.o
gcc -o main main.o printFunc.o
main.o : main.c
gcc -g -Wall -c -o main.o main.c
printFunc.o : printFunc.c
gcc -g -Wall -c -o printFunc.o printFunc.c
其他人将包含头文件作为依赖项:
main : main.o printFunc.o //main.h EDIT
//commands
main.o : printFunc.o main.h
//commands
最后:
那么,是否有必要将头文件包含为可执行文件的依赖项?何时将包含文件放置在源中?
也可以使用这个命令:
executableName : dependencies.o //and a header file?
gcc -g -Wall -o executableSource.c
这可以用这条线来完成:
gcc -g -Wall -o executableName executableSource.c
是否会运行第二个命令,但第一个命令是速记符号?
最后,我认为“-o”命令是“将输出发送到”,如果你愿意的话。如果这样,运行以下命令似乎很直观:
gcc compileThisFile andSendOutputTo thisExecutableFile
gcc someSource.c -o executableFile
但是上面列出的符号更像:
gcc sendOutputTo thisExecutableFile fromThisSource
那是对的吗?