gpt4 book ai didi

c - 如何链接来自不同目录的对象(运行 ld)

转载 作者:行者123 更新时间:2023-11-30 19:35:38 26 4
gpt4 key购买 nike

我正在编写简单的 makefile 项目。

我尝试分两步构建该程序:

  1. 编译源文件并将目标文件保存在不同的目录中
  2. 将对象链接到可执行文件

考虑一些简单的事情,例如:

all:
gcc -o ~/some_dir/main.o -c main.c
ld -o my_program main.o

问题是调用目录不是“~/some_dir”,因此 ld 找不到目标文件...如何在 ld 搜索路径中包含“some_dir”?

从更全局的角度来看,我在各个目录中都有目标文件,我想使用单个链接器命令文件将它们全部链接在一起。

谢谢。

最佳答案

你让事情变得比需要的复杂得多,应该让 make 为你做更多的工作。下面是您重写的简单示例

SRCS=main.c
BUILDDIR=~/somedir
OBJS=$(SRCS:%.c=$(BUILDDIR)/%.o)
CFLAGS=-g

all: my_program

my_program: $(OBJS)
$(CC) $(CFLAGS) -o $@ $^

$(BUILDDIR)/%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $^

它在顶部定义了许多变量,例如 SRCS,它将包含源文件列表、存储对象文件的目录并生成要构建的对象文件的列表。然后它使用 $(OBJS) 定义它们是 my_program 的依赖项。 make 规则中的 $@ 是一个变量,意思是“我们正在构建的东西”,$^ 是依赖项列表。您可以向 my_program 添加其他依赖项,而无需更改正在运行的命令。

然后有一条规则定义如何从当前目录中的源文件构建$(BUILDDIR)中的目标文件。

关于c - 如何链接来自不同目录的对象(运行 ld),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42395212/

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