gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:19 24 4
gpt4 key购买 nike

我想写一个 Makefile 来编译一个目录下的多个文件。在文件夹中,我有 5-1.c 5-2.c 5-3.c 它们是主程序。我还有 string.c string.h 和 types.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

当我从终端运行 make 时,它​​会创建 5-1、5-2 和 5-3 作为执行的程序。问题发生在 5-3。主程序是5-3.c,它包括string.c。

头文件string.h包含types.h。如何修改5-3的gcc来编译这个程序。

我的系统是 Mac OX。 $ gcc --version配置为:--prefix=/Applications/Xcode.app/Contents/Developer/usr--with-gxx-include-dir=/usr/include/c++/4.2.1Apple 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;
}

我的 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 */

我的 types.h 文件:

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

我觉得 Mac OX 与其他 linux 系统有很大的不同。请告知是否有人可以根据这些编写正确的 Makefile。谢谢。

最佳答案

问题出在你制作string.o的规则上:

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

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

另外,虽然将头文件列为先决条件是完全合理的,但将它们列在编译命令中是不正常的。

关于c++ - 如何让Makefile在一个目录下编译多个c文件和h文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com