参考:Makefile学习笔记(ubuntu18+vscode)_makefile创建文件夹-CSDN博客
在文件中新建main.c文件
#include <stdio.h>
#include "functions.h"
int main()
{
printHello();
printf("This is main:\n");
printf("The factorial of 5 is :%d\n", factorial(5));
return 0;
}
新建factorrial.c文件
#include "functions.h"
int factorial(int n)
{
if (n == 1)
{
return 1;
}
else
{
return n * factorial(n - 1);
}
}
新建printhello.c文件
#include <stdio.h>
#include "functions.h"
void printHello()
{
int i;
printf("Hello World!\n");
}
functions.h文件
#ifndef _FUNCTIONS_H_
#define _FUNCTIONS_H_
void printHello();
int factorial(int n);
#endif
Makefile不同写法
version 1
hello: main.c printHello.c factorial.c
gcc -o hello main.c printHello.c factorial.c
version 2
CXX = g++
TARGET = hello
OBJ = main.o printHello.o factorial.o
#make时执行gcc 先找下有没有target,如果没有,就去找obj,obj不存在,编译3个*.c文件生成*.o文件
#然后再编译OBJ文件,生成可执行文件hello
$(TARGET) : $(OBJ)
$(CXX) -o $(TARGET) $(OBJ)
main.o : main.c
$(CXX) -c main.c
printHello.o : printHello.c
$(CXX) -c printHello.c
factorial.o : factorial.c
$(CXX) -c factorial.c
-
$@:目标文件,也就是target
-
$^:所有的依赖文件
-
$<:第一个依赖文件
version 3
CXX = gcc
TARGET = hello
OBJ = main.o printHello.o factorial.o
CXXLAGS = -c -Wall
$(TARGET) : $(OBJ)
$(CXX) -O $@ $^
%.o : %.c
$(CXX) $(CXXLAGS) $< -o $@
.PHONY : clean
clean:
rm -f *.o $(TARGET)