gpt4 book ai didi

c - 如何编译链接到不同 files.o 的源文件的多个实例

转载 作者:行者123 更新时间:2023-11-30 14:26:00 25 4
gpt4 key购买 nike

我有两个文件.c,它们包含相同的方法(相同的名称和参数),但实现方式不同,以提供独立于实现的方法。如何生成单个测试文件并使用两个实现对其进行编译而不会出现部署错误?

图形化解释是:

file_one.c(与file_two.c相同的方法名称和参数)

file_two.c

文件测试.c

我想要:

编译 -> file_test.c file_one.c

编译 -> file_test.c file_two.c

在 makefile 中,不制作 file_test.c 的两个副本

<小时/>

CC=gcc

CFLAGS=-c -Wall

全部:test_matrice test_lista

测试矩阵:grafi_test.c grafi_matrice.o

       $(CC) grafi_test.c grafi_matrice.o -o test_matrice 

test_lista:grafi_test.c grafi_liste.o

       $(CC) grafi_test.c grafi_liste.o -o test_lista 

grafi_matrice.o:grafi_matrice.c grafi_matrice.h

       $(CC) $(CFLAGS) grafi_matrice.c 

grafi_liste.o:grafi_liste.c grafi_liste.h

       $(CC) $(CFLAGS) grafi_liste.c 

干净:rm -rf *.o test_matrice test_lista

<小时/>

我收到此错误:

gcc grafi_test.c grafi_matrice.o -o test_matrice

grafi_test.c:4:错误:“*”标记之前应有“=”、“,”、“;”、“asm”或“属性

grafi_test.c:在函数“main”中:

grafi_test.c:21:错误:“graph”未声明(在此函数中首次使用)

grafi_test.c:21:错误:(每个未声明的标识符仅报告一次

grafi_test.c:21:错误:对于它出现的每个函数。)

grafi_test.c:21:错误:‘G’未声明(在此函数中首次使用)

make:* [test_matrice] 错误 1

<小时/>

谢谢,乔治

最佳答案

这样就可以了:

file_test_%: file_test.c file_%.c
$(CC) $^ -o $@

如果您愿意,可以添加默认规则:

all: file_test_one file_test_two

编辑
问题出在你的声明上。如果您在 grafi_matrice.c 中有这样的函数:

void graph(int n)
{
...
}

那么另一个文件(如 grafi_test.c)中的代码就不能简单地调用它。编译器尝试编译 grafi_test.c,到达 graph(3) 行并显示“graph()?我对此一无所知。 ”您必须至少在 grafi_test.c(调用上方)中有一个声明,如下所示:

void graph(int);

处理此问题的常用方法是使用头文件,但这可以等待。

编辑:
编译器仍然对graph一无所知。你必须了解声明,否则你将没有成功的机会。首先,grafi_matrice.c 是如何描述graph 的?

关于c - 如何编译链接到不同 files.o 的源文件的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9738555/

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