首页 > 解决方案 > 运行多个c文件时编译时错误

问题描述

#已编辑

我现在在 add.h 和 add.c 这两个简单的文件上进行了测试。

我制作了一个 Makefile 来编译我的程序。这是我的生成文件。

# Make file for running the project
CC=gcc
CFLAGS= -Wall -g
LDFLAGS = -include
OBJFILES = add.o
LIB = add.h
TARGET = add

all: ${TARGET}

%.o: %.c
    ${CC} ${CFLAGS} -c -o $@ $<

${TARGET}: ${OBJFILES}
    ${CC} ${CFLAGS} -o ${TARGET} ${OBJFILES}

clean:
    rm -f $(OBJFILES) $(TARGET) *~

当我跑步时

make add

我收到以下错误:

gcc -Wall -g -c -o add.o add.c
gcc -Wall -g -o add add.o
Undefined symbols for architecture x86_64:
  "_b", referenced from:
      _main in add.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [add] Error 1

这是我的代码片段

添加.c

#include <stdio.h>
#include <stdlib.h>
#include "add.h"

int main(void) {
    int a = 10, b=20;
    add(a, b);
    return 0;
}

添加.h

#ifndef __ADD_H_
#define __ADD_H_

extern int a,b;

int add(a,b)
{
    return a+b;
}

#endif // __ADD_H_

标签: cgccmakefile

解决方案


您缺乏实际构建目标文件的规则。现在,一旦它们已经存在,您就只有一个可以将它们全部链接在一起。尝试添加:

%.o: %.c
    ${CC} ${CFLAGS} -c -o $@ $<

这告诉 make 如何从源文件构建目标文件。


推荐阅读