I already know the differences between a header file and a library. However, when I’m writing my makefile, I have some difficulties on deciding if I should put something as a dependency of the file or just at the linking rule.
For example: I have 2 simple files:
main.c:
#include <stdio.h>
main(){
printf("this is the sine or 90");
sinus(90);
}
and func.c:
#include <math.h>
sinus(int num){
return sin(num);
}
and my makefile is:
main: main.o func.o
gcc main.o func.o -lm -o main
func.o: func.c
main.o: main.c
Well, my question is why this makefile works and this one doesn’t:
main: main.o func.o
gcc main.o func.o -lm -o main
func.o: func.c math.h
main.o: main.c
You don’t need to make func.o depend on math.h as that file is very unlikely to change.
Regarding the error you get if you do is because you don’t explicitly specify how make should compile the file so it tries to deduce how to compile it and it only works in simple cases. I’m not sure exactly how make does it but I think it just does
gcc -o target.o -c <your deps>.