2015-07-18 1 views
1

Я хочу написать Makefile для компиляции нескольких файлов в один каталог. В папке у меня 5-1.c 5-2.c 5-3.c, и они являются основными программами. У меня также есть файлы string.c string.h и types.h. Мой MakefileКак сделать Makefile для компиляции нескольких файлов c и h файлов в одном каталоге

all: 5-1 5-2 5-3 

5-1: 5-1.c getch.c 
    gcc -Wall -v -g -o 5-1 5-1.c getch.c 

5-2: 5-2.c getch.c 
    gcc -Wall -g -o 5-2 5-2.c getch.c 

// The issues happens here. I does not generate string.o 
// Also, I feel the format of 5-3 does not looks correct. 
// I do not know how to write it here. 
5-3: 5-3.o string.o 
    gcc -Wall -g -o 5-3 5-3.o string.o 

string.o: string.c string.h 
    gcc -Wall -g -o string.c string.h types.h 

clean: 
    rm -f 5-1 5-2 5-3 
    rm -rf *.dSYM 

Когда я бегу сделать из терминала, это создаст 5-1, 5-2 и 5-3 в качестве выполняемых программ. Проблема происходит на 5-3. Основная программа - 5-3.c, в нее входит string.c.

В заголовочный файл string.h входят типы.h. Как изменить gcc для 5-3 для компиляции этой программы.

Моя система Mac OX. $ gcc --version Конфигурировано с помощью: --prefix =/Applications/Xcode.app/Содержание/Разработчик/usr --with-gxx-include-dir =/usr/include/C++/4.2.1 Версия Apple LLVM 6,0 (звон-600.0.57) (на основе LLVM 3.5svn) Цель: x86_64-яблочно-darwin13.4.0 модель Автор:

POSIX

Мои файлы string.c

#include "string.h" 

char *strcat(char *dst, const char *src) 
{ 
    char* cp = dst; 

    while(*cp) { 
     cp++; 
    } 

    while(*src) 
    { 
     *cp++ = *src++; 
    } 

    return dst; 
} 

Мой string.h файл:

#ifndef _STRING_H 
#define _STRING_H 

#include <stdio.h> 
#include "types.h" 

#ifndef NULL 
#define NULL 0 
#endif 

char *strcat(char *, const char *); 

#endif /* _STRING_H */ 

Мои типы. ч файлы:

#ifndef _SIZE_T_DEFINED 
#define _SIZE_T_DEFINED 
    typedef unsigned int uint32_t; 
#endif 

Я так сильно разменяю Mac OX с другой системой linux. Пожалуйста, сообщите, если кто-то может написать правильный Makefile на основе этих данных. Благодарю.

+0

«Я чувствую такую ​​большую разницу в Mac OX с ** другой ** системой Linux». OS-X - это не ** система Linux! – Olaf

ответ

1

Проблема с вашим правилом для изготовления string.o:

string.o: string.c string.h 
    gcc -Wall -g -o string.c string.h types.h 

Рецепт на самом деле не создать целевой файл. Я подозреваю, что вы хотели использовать -c вместо -o или, возможно, использовать -c -o string.o.

Кроме того, хотя вполне разумно перечислить заголовки в качестве предпосылок, это ненормально, чтобы перечислить их в команде компиляции.

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