C 如何链接不同目录中的对象(运行ld)
我正在写一个简单的makefile项目 我试着分两步构建程序:C 如何链接不同目录中的对象(运行ld),c,gcc,makefile,gnu,ld,C,Gcc,Makefile,Gnu,Ld,我正在写一个简单的makefile项目 我试着分两步构建程序: 编译源文件并将目标文件保存在其他目录中 将对象链接到可执行文件中 考虑一些简单的事情,比如: all: gcc -o ~/some_dir/main.o -c main.c ld -o my_program main.o 问题是调用目录不是“~/some\u dir”,因此ld找不到目标文件。。。如何在ld搜索路径中包含“some_dir” 从更全局的角度来看,我在不同的目录中有对象文件,我希望使用单个链接器命令
all:
gcc -o ~/some_dir/main.o -c main.c
ld -o my_program main.o
问题是调用目录不是“~/some\u dir”,因此ld找不到目标文件。。。如何在ld搜索路径中包含“some_dir”
从更全局的角度来看,我在不同的目录中有对象文件,我希望使用单个链接器命令文件将它们链接在一起
谢谢。你让事情变得比需要的复杂得多,应该让
为你做更多的工作。下面是您重新编写的简单示例
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)
来定义它们是myu程序的依赖项。make规则中的$@是一个变量,表示“我们正在构建的东西”,而$^是依赖项列表。您可以将其他依赖项添加到my_程序
,而无需更改正在运行的命令
然后有一条规则定义如何从当前目录中的源文件构建$(BUILDDIR)
中的对象文件。Um,通过指定要链接的对象的可用路径?否则你会怎么做?但无论如何,通常最好使用gcc
作为链接器驱动程序,而不是直接调用链接器:gcc-o my_program~/some_dir/main.o
。此外,也不要使用绑定到当前用户主目录的路径(~/some_dir
)更明智的做法是将构建文件放置在相对于构建工作目录的位置,并相对于包含Makefile的目录定位源文件。