gpt4 book ai didi

makefile - gmake 从多个目录中获取目标文件列表

转载 作者:行者123 更新时间:2023-12-04 15:15:40 25 4
gpt4 key购买 nike

我不知道很多我一直在根据需要学习位的 makefile 内容。

我的 makefile 最大的失败是我一直手动列出所有文件,虽然这不是问题,但我当前的项目变得笨拙。我有 4 个目录,每个目录都有源文件。

如何获得所有目标文件列表而不必手动列出它们。

这不起作用,但它显示了我一直在尝试做的事情。

VPATH = Lib GameCode Moot/Moot Moot/Impl

OBJS = $(subst .cpp, .o, $(VPATH))

foobar: $(OBJS)
g++ -o $@ $^

%.o: %.cpp
g++ -c $< -o $@ -I Moot

clean:
rm main.o lib.o foo.o foobar

最佳答案

就个人而言,我在手动列出所有文件时从未遇到任何问题。与用有用的内容填充文件相比,将文件列出到 makefile 所花费的时间可以忽略不计。

要从不同目录获取所有文件,建议使用 wildcard function .所以my_sources:=$(wildcard *.cpp dir1/*.cpp)将使变量包含与通配符表达式匹配的源文件。

但是,我发现它不如使用通常的 Linux 方便 find通过shell命令:

# Find all sources
my_sources:=$(shell find -iname '*.cpp')
# Make targets out of them
OBJS=$(my_sources:%.cpp=%.o)

Find 比 Make 的内置功能更强大 wildcard .您可能还想使用其他 shell 功能(例如管道)来过滤 find 的输出。 (如果 Make 的 filter-out 功能不够用)。或类似的东西,以避免过多的变量:
OBJS:=$(shell find -iname '*.cpp' | sed 's/\.cpp$/.o/')

你说出它的名字!

关于makefile - gmake 从多个目录中获取目标文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4178597/

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