我正在编写简单的makefile项目。
我试图分两步建立程序:
考虑一些简单的事情:
all:
gcc -o ~/some_dir/main.o -c main.c
ld -o my_program main.o
问题是调用目录不是"〜/ some_dir"所以ld找不到目标文件......我怎样才能包含" some_dir"在ld搜索路径?
从更全局的角度来看,我在各种目录中都有目标文件,并且我希望使用单个链接器命令文件将它们全部链接在一起。
感谢。
答案 0 :(得分:0)
你的事情比他们需要的要复杂得多,应该让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)
中的目标文件是如何从当前目录中的源文件构建的。