c - 使用 Makefile 进行链接和编译

标签 c makefile

gcc 4.7.2
c89
GNU Make 3.82

我正在尝试使用这个 Makefile 编译这个程序。目前我只有 1 个 src 文件,但稍后我将包含更多文件。

我试图让 Makefile 创建 bin 目录(如果它不存在)并将二进制可执行文件放入其中。

INC_PATH=-I/home/dev_tools/apr/include/apr-1
LIB_PATH=-L/home/dev_tools/apr/lib
LIBS=-lapr-1
RUNTIME_PATH=/home/dev_tools/apr/lib
CC=gcc
CFLAGS=-Wall -Wextra -g -m32 -D_DEBUG -D_THREAD_SAFE -D_REENTRANT -D_LARGEFILE64_SOURCE -O2 $(INC_PATH)
OBJECTS=timeout.o
EXECUTABLE=bin/to

all:    build $(EXECUTABLE)

$(EXECUTABLE):
    $(CC) -m32 -o $@ -Wl,-rpath,$(RUNTIME_PATH), $(LIB_PATH) $(OBJECTS) $(LIBS)

build:
    @mkdir -p bin

clean:
    rm -rf *~ timeout *.o

我收到此错误:

make
gcc -m32 -o bin/to -Wl,-rpath,/home/dev_tools/apr/lib, -L/home/dev_tools/apr/lib timeout.o -lapr-1
gcc: error: timeout.o: No such file or directory
make: *** [bin/to] Error 1

当我删除 $(OBJECTS) 时,我得到以下信息:

gcc -m32 -o bin/to -Wl,-rpath,/home/dev_tools/apr/lib, -L/home/dev_tools/apr/lib -lapr-1
/usr/bin/ld: cannot find : No such file or directory
collect2: error: ld returned 1 exit status
make: *** [bin/to] Error 1

不知道我哪里出了问题。

最佳答案

您尚未指定如何构建目标 timeout.o。

您需要添加以下代码:

timeout.o: timeout.c
            $(CC) $(CFLAGS) -c -o $@ $<

如果您最终需要编译更多源文件,您可以使用如下模式匹配规则:

%.o: %.c
        $(CC) $(CFLAGS) -c $< -o $@

关于c - 使用 Makefile 进行链接和编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14618572/

相关文章:

c - C 中 switch 的退出情况

c - STM32F103如何使用ENC28j60

c - 自动微分Matlab Coder生成的C代码

c - readdir() 和 fgets 的问题

c - Makefile 日志记录在第一个错误时停止并显示错误

c - 在不关闭工作的情况下重新读取正在/proc 中更新的文件吗?

c - 如何编写Makefile(带有子Makfile)更简洁

linux - 如何在 openhpi 安装期间解决 openssl 问题?

gcc - 如果编译失败,则执行命令

makefile - 将参数从 makefile 传递到 cocotb 测试平台