gpt4 book ai didi

c - 带有循环的 Makefile

转载 作者:行者123 更新时间:2023-11-30 14:55:39 30 4
gpt4 key购买 nike

我在名为sources.txt 的文本文件中有一个源文件名列表。在 Makefile 中,我想从sources.txt 中将每个文件名读取为 name 并包含以下行,

name.o: name.c name.h Makefile
$(CC) $(CFLAGS) -c name.c

在 Makefile 中。我尝试创建 Makefile。

CFLAGS = -Wall -std=c99
CC = gcc

sourcesfile="source/sources.txt"
# Read every source file name.
# Produce the corresponding .c, .h and .o extension versions.
# Then add a file in the makefile as:
# name.o: name.c name.h Makefile
# $(CC) $(CFLAGS) -c name.c
# If the line has main, handle that case separately -- there is no mention of main.h

while IFS= read -r line; do
cfile=$(echo source/${line}.c)
hfile=$(echo source/${line}.h)
ofile=$(echo source/${line}.o)
ofiles=ofiles+$(ofile)
if [[ $line == main ]] ; then
$(ofile): $(cfile) Makefile
$(CC) $(CFLAGS) -c $(cfile)
else
$(ofile): $(cfile) $(hfile) Makefile
$(CC) $(CFLAGS) -c $(cfile)
fi
done < "$sourcesfile"

genetics:$(ofiles)
$(CC) $(CFLAGS) -o genetics $(ofiles)

clean:
$(RM) $(ofiles)

source/sources.txt是一个文本文件,其中包含 c 源文件的名称,但不带 .c 扩展名。例如,

main
file1
file2
file3
file4
file5

当我使用 make 运行上述 Makefile 时,它​​会产生以下错误。

Makefile:19: *** 命令在第一个目标之前开始。停止。

有人可以帮我构建这样一个Makefile吗?如果您有一个可行的示例,我们将不胜感激。

最佳答案

假设您使用的是 GNU make,也许这对您有用。

names=$(shell cat sources.txt)
ofiles=$(patsubst %,%.o,$(names))

genetics:$(ofiles)
$(CC) $(CFLAGS) -o genetics $(ofiles)

%.o: %.c %.h Makefile
$(CC) $(CFLAGS) -c $<

clean:
$(RM) $(ofiles)

引用:Create a variable in a makefile by reading contents of another file

关于c - 带有循环的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45642297/

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