Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使Makefile在一个目录下编译多个c文件和h文件_C++_C_Macos_Gcc_Makefile - Fatal编程技术网

C++ 如何使Makefile在一个目录下编译多个c文件和h文件

C++ 如何使Makefile在一个目录下编译多个c文件和h文件,c++,c,macos,gcc,makefile,C++,C,Macos,Gcc,Makefile,我想写一个Makefile来编译一个目录中的多个文件。 在文件夹中,我有5-1.c5-2.c5-3.c,它们是主程序。我还有string.cstring.h和types.h文件。我的Makefile 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

我想写一个Makefile来编译一个目录中的多个文件。 在文件夹中,我有5-1.c5-2.c5-3.c,它们是主程序。我还有string.cstring.h和types.h文件。我的Makefile

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
当我从终端运行make时,它将创建5-1、5-2和5-3作为执行的程序。 问题发生在5-3号。主程序是5-3.c,它包含字符串.c

头文件字符串.h包括类型.h。如何修改gcc for 5-3以编译此程序

我的系统是MacOx。 $gcc—版本 配置为:--prefix=/Applications/Xcode.app/Contents/Developer/usr--gxx include dir=/usr/include/c++/4.2.1 苹果LLVM版本6.0(clang-600.0.57)(基于LLVM 3.5svn) 目标:x86_64-apple-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;
}
My 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 */

我觉得MacOX和其他linux系统有很大的不同。
请告知是否有人可以基于这些编写正确的Makefile。谢谢。

问题在于您制作
字符串的规则。o

string.o: string.c string.h
    gcc -Wall -g -o string.c string.h types.h
配方实际上并不创建目标文件。我怀疑您想使用
-c
而不是
-o
,或者可能使用
-c-o string.o


此外,尽管将头作为先决条件列出是完全合理的,但在编译命令中列出头是不正常的。

“我觉得Mac OX与其他linux系统有很大的不同”。OS-X不是Linux系统!
string.o: string.c string.h
    gcc -Wall -g -o string.c string.h types.h