Это заголовочный файл или библиотека? в make-файле - PullRequest
1 голос
/ 02 июня 2010

Я уже знаю разницу между заголовочным файлом и библиотекой. Однако, когда я пишу свой make-файл, у меня возникают некоторые трудности с принятием решения о том, следует ли мне помещать что-либо в качестве зависимости файла или просто в правило связывания.

Например: у меня есть 2 простых файла: main.c:

#include <stdio.h>
main(){
  printf("this is the sine or 90");
  sinus(90);
}

и func.c:

#include <math.h>
sinus(int num){
  return sin(num);
}

и мой make-файл:

main:   main.o  func.o
    gcc main.o func.o -lm -o main

func.o: func.c
main.o: main.c

Ну, мой вопрос: почему этот make-файл работает, а этот нет:

main:   main.o  func.o
    gcc main.o func.o -lm -o main

func.o: func.c math.h
main.o: main.c

Ответы [ 3 ]

2 голосов
/ 02 июня 2010

Потому что make ищет файл "math.h" в текущем каталоге и пытается сделать cc func.c math.h для создания func.o

2 голосов
/ 02 июня 2010

Вам не нужно делать func.o зависимым от math.h, так как этот файл вряд ли изменится.

Что касается ошибки, которую вы получаете, если вы ее делаете, это потому, что вы не указали явно, как make должна скомпилировать файл, чтобы он пытался определить, как его скомпилировать, и он работает только в простых случаях. Я не уверен, как именно это делает make, но я думаю, что это просто gcc -o target.o -c <your deps>.

1 голос
/ 02 июня 2010

Проблема в том, что вы не знаете точно, как решается Makefile после использования неявных правил - определенно есть такое, которое вызывает проблемы у вас. (возможно, попробуйте скомпилировать math.h, или math.h не найден и т. д. (вы не опубликовали свои ошибки, поэтому мы можем только строить догадки).

Я бы посоветовал вам отключить неявные правила, вызвав make с "-r" и сделать все явно - таким образом вы узнаете больше, поскольку вы будете знать, как работает makefile, вместо того, чтобы знать, как писать make-файлы, которые работают при некоторых обстоятельствах ,

Подробнее о неявных правилах: Создание документации - Неявные правила

Подробнее о марке Маркировка документации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...