Я только начал изучать make-файлы: я создал простой учебник самостоятельно, но кажется, что я где-то ошибаюсь, и я не знаю, где; мой мини-учебник сформирован сценарием main.c, который вызывает функцию с именем kernel.c; в этой последней функции вызывается еще 2 функции: add.c (что добавляет 2 числа вместе) и mul.c (что умножает результат предыдущей суммы); Затем я создал заголовки kernel.h и functions.h, которые содержат прототипы функций, определенных выше; это два заголовка содержится в папке, созданной в том же одном из main.c сценария: общих/вклMakefile для новичков
Вот файлы:
//main
#include <stdio.h>
#include <stdlib.h>
#include "kernel.h"
int main(){
int a = 5, b = 4, c = 0;
int *pa, *pb, *pc;
pa = &a; pb = &b; pc = &c;
kernel(pa, pb, pc);
printf("c = %d\n", c);
return 0;
}
здесь kernel.c
#include "kernel.h"
#include "functions.h"
void kernel(int* a, int*b, int* c){
int x = add(*a,*b);
*c = mul(x);
}
здесь add.c
#include "functions.h"
int add(int a, int b){
return a + b;
}
здесь mul.c
#include "functions.h"
int mul(int a){
return a*2;
}
здесь kernel.h
void kernel(int* a, int*b, int* c);
здесь functions.h
int add(int a, int b);
int mul(int a);
Создание файла я написал, выглядит следующим образом:
#===========================Makefile================================#
CC=gcc
IDIR = common/inc
CFLAGS=-c -Wall -I$(IDIR)
all: eseguibile
eseguibile: main.o
$(CC) $(CFLAGS) main.o -o eseguibile
main.o: main.c kernel.o
$(CC) $(CFLAGS) main.c kernel.o
kernel.o: kernel.c add.o mul.o
$(CC) $(CFLAGS) kernel.c add.o mul.o
add.o: add.c
$(CC) $(CFLAGS) add.c
mul.o: mul.c
$(CC) $(CFLAGS) mul.c
clean:
rm -rf *o eseguibile
Я знаю, p rogram работает, потому что, если я нахожу gcc main.c kernel.c add.c mul.c -I common/inc/
в терминале, все работает нормально. ?
Может кто-нибудь сказать мне, что я делание неправильно `
ошибка, что я получаю это:
gcc -c -Wall -Icommon/inc add.c
gcc -c -Wall -Icommon/inc mul.c
gcc -c -Wall -Icommon/inc kernel.c add.o mul.o
gcc: warning: add.o: linker input file unused because linking not done
gcc: warning: mul.o: linker input file unused because linking not done
gcc -c -Wall -Icommon/inc main.c kernel.o
gcc: warning: kernel.o: linker input file unused because linking not done
gcc -c -Wall -Icommon/inc main.o -o eseguibile
gcc: warning: main.o: linker input file unused because linking not done
с какой ошибкой вы сталкиваетесь? – Nico
Используете ли вы вкладки или пробелы для отступов '$ (CC) $ (CFLAGS) ...'? Потому что 'make' * требует * вкладки. – RPGillespie
да! я просто не мог реплицировать вкладки в stackoverflow, но в моем исходном make-файле были правильно сделаны вкладки –