2013-09-06 7 views
0

Makefile:Makefile дают ошибки неопределенная ссылка на 'основной'

all: a.out 

a.out: b.o a.o 
    gcc -o b.o a.o 

a.o: a.c 
    gcc -c a.c 

b.o: b.c 
    gcc -c b.c 

.PHONY:clean 

clean: 
    rm *.o a.out 

с make, дают информацию:

error: undefined reference to 'main'

collect2: ld return 1

make: * [a.out] error 1

Но если положить исходный файл a.c и b.c в Eclipse CDT, он компилирует хорошо. Пожалуйста, объясните, что не так с моим makefile?

PS: a.c:

int global_1 = 100; 

b.c:

extern int global_1; 

int main() 
{ 
    int global_2 = global_1 * 2; 
    return 0; 
} 

ответ

1

Это правило не указывает правильный файл результата:

a.out: b.o a.o 
    gcc -o b.o a.o 

Это должно быть

a.out: b.o a.o 
    gcc -o "[email protected]" b.o a.o 

Вот что вы получите за нарушение одного из Paul's Rules of Makefiles. Кстати, это не make-файл, который «дает ошибку», это компиляция, в частности компоновщик.

0

Это:

a.out: b.o a.o 
    gcc -o b.o a.o 
     \----/ 
      | 
      | 
    this says "name 
    the output b.o" 

будет перезаписывать файл b.o объекта с выходным файлом. Я уверен, что make достаточно умен, чтобы отобразить требуемую команду без ввода, поэтому попробуйте удалить вторую строку.

+0

Извините, при удалении второй строки, как вы сказали, команда 'make' не будет генерировать исполняемый файл' a.out'. Я использую Ubuntu 12.04 default make. – lulyon

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