2013-03-24 2 views
-2

Я пытаюсь создать новую программу на C, но я не могу ее скомпилировать. Это потому, что мой makefile кажется неправильным. Я продолжаю получать «Нет правила, чтобы сделать цель« все »и« Нет правила, чтобы цель была чистой ». Вот то, что я до сих пор:Невозможно скомпилировать мою программу на C. Ошибка Makefile

Основная программа:

#include <stdio.h> 

Sleepy() { 

main(); { 
    printf("Hello world"); 
} 

} 

Header (Хотя я ничего не сделал его еще):

#ifndef SLEEPY_H_ 
#define SLEEPY_H_ 



#endif /* SLEEPY_H_ */ 

И Makefile:

CC = gcc 
CFLAGS = -c 

Sleepy.o: Sleepy.c Sleepy.h 
$(CC) $(CFLAGS) Sleepy.c 

Sleepy: Sleepy.o 
$(CC) -o Sleepy.exe Sleepy.o 


all: Sleepy 

clean: 
rm -rf *.0 a.out 

make = all 

Я читал всевозможные учебные пособия, но я не могу заставить его работать. Кто-нибудь поможет мне в этом?

+3

После Makefile проблемы фиксированы, вы получите жалобы от компилятора. Ваш источник неверен. –

+0

@ DanielFischer Что такое Sleepy.c Предполагаю? В любом случае, не следует ли мне задавать такие вопросы здесь? Кажется, кажется, что это так. – blutuu

+0

@blutuu У вас есть вопросы первого порядка в 'sleepy.c'. Во-первых, вам нужно получить 'main' из' Sleepy() 'i.e. Основная функция должна быть определена независимо. Вы пытаетесь написать' CTOR'? Далее, у главной есть 'semi-colon', как в' main(); '. Для вашей цели, пожалуйста, * удалите * полуточку. 'main' должен возвращать целое число и, следовательно, определите' int main() 'и выполните' return 0; 'в конце main. И, наконец, в вашем make-файле вы можете удалить 'make = all' в конце вашего файла – Ganesh

ответ

1

Для получения вашей компиляции необходимы следующие изменения.

Sleepy.c

#include <stdio.h> 

int main (void) { 
    printf("Hello world"); 
} 

Makefile

CC = gcc 
CFLAGS = -c 

all: Sleepy 

Sleepy.o: Sleepy.c Sleepy.h 
    $(CC) $(CFLAGS) Sleepy.c 

Sleepy.exe: Sleepy.o 
    $(CC) -o Sleepy.exe Sleepy.o 

clean: 
    rm -rf *.o Sleepy.exe 

Пожалуйста, обратите внимание на изменения в clean правила вашего Makefile. Вы должны будете удалить исполняемый файл, который Sleepy.exe

ПРИМЕЧАНИЕ: Правила Sleepy.o и Sleepy должны быть компенсированы TAB, а не пространства. В противном случае, вы столкнетесь с этой ошибкой: makefile:5: *** missing separator. Stop

+0

Понял. Ошибка 0 была ошибкой, и я ее исправил. Даже с изменениями нет компиляции. – blutuu

+0

Другое дело; Должно ли это выполняться из командной строки? Потому что я использую Eclipse. – blutuu

+0

@blutuu .. уточните мое последнее обновление. Это работает для вас? – Ganesh

0

попробовать это,

All: sleepy 

sleepy: sleepy.c sleepy.o sleepy.h 
     gcc sleepy.c -o sleepy 
clean: 
     rm -f *.o 
+0

'gcc -c sleepy.c -o sleepy.exe' создаст объектный файл, а не исполняемый файл. После этапа компиляции нельзя запускать 'sleepy.exe'. – Ganesh

+0

@Ganesh эй спасибо. Я не знаю об этом. Я внес изменения. Не могли бы вы сказать мне тогда, как сделать «sleepy.exe» исполняемым? – SRJ

+0

@SRJ .. Даже ваш обновленный комментарий не является точным, так как 'sleepy' будет только объектным файлом. Чтобы сгенерировать исполняемый файл, используйте 'gcc -o sleepy sleepy.c' i.e. remove' -c', поскольку это говорит компилятору компилировать только – Ganesh

Смежные вопросы