gpt4 book ai didi

Makefile 对象列表和对象位置

转载 作者:行者123 更新时间:2023-12-01 12:45:09 24 4
gpt4 key购买 nike

我使用这些变量和目标将目标文件编译到特定位置:

OBJDIR=./obj

objdir:
$(MKDIR) $(OBJDIR)

%.o: %.cpp objdir
$(CXX) $(CXXFLAGS) -c $< -o $(OBJDIR)/$@

现在我的问题是,在链接可执行文件时,我想使用变量来保存目标文件列表,例如:

FOOOBJECTS=foo.o foo1.o foo2.o
BAROBJECTS=bar.o bar1.o

mycrappyprogram: main.o $(FOOBOJECTS) $(BARBOJECTS)
$(CXX) $(FOOBJECTS) $(BAROBJECTS) -o $(BINDIR)/mycrappyprogram

当然我不能这样做,因为所有对象都在 ./obj/ 中,所以食谱找不到它们。

我如何一次性定义目标文件列表,并在配方中使用它们时对其进行限定?

最佳答案

1) Make 可以操作字符串:

FOOOBJECTS=foo.o foo1.o foo2.o
BAROBJECTS=bar.o bar1.o

OBJECTS = $(addprefix $(OBJDIR)/, $(FOOOBJECTS) $(BAROBJECTS))

2) 自动变量是你的 friend (我假设你希望你的可执行文件包含 main.o,而不仅仅是 foobar对象):

mycrappyprogram: main.o $(OBJECTS)
$(CXX) $^ -o $(BINDIR)/$@

3) 一个(非 PHONY)规则应该构建它所说的它将构建的东西,否则你会遇到麻烦:

$(BINDIR)/mycrappyprogram: main.o $(OBJECTS)
$(CXX) $^ -o $@

$(OBJDIR)/%.o: %.cpp objdir
$(CXX) $(CXXFLAGS) -c $< -o $@

关于Makefile 对象列表和对象位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20865421/

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