gpt4 book ai didi

c - 设计可移植的 makefile 循环

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:41 25 4
gpt4 key购买 nike

我需要设计一个 make 文件,它将连续运行多个(类似命名的)程序。它还需要是可移植的,因为它将在 CentOS 和 Solaris(非 GNU)系统上使用。我以前从未真正使用过 makefile 中的循环。下面是我的尝试。不幸的是,它似乎只执行了第一个程序。

CC = gcc
CFLAGS = -g -Wall #-Werror

SRCS := $(wildcard *.c)
PROGS := $(SRCS:.c=)
OBJS := $(SRCS:.c=.o)

all: $(PROGS)

run: $(PROGS)
$(foreach prog, $(PROGS), ./$(prog))

clean: $(PROGS)
rm $(PROGS)

这是从终端运行 make run 的结果

./prog-14  ./prog-17  ./prog-20  ./prog-13  ./prog-18  ./prog-06  ./prog-07  ./prog-04  ./prog-19  ./prog-11  ./prog-03  ./prog-08  ./prog-12  ./prog-16  ./prog-21  ./prog-01  ./prog-10  ./prog-15  ./prog-05  ./prog-09  ./prog-02
in program 14

最佳答案

当您说 Solaris 时,是指您使用的是 Solaris make 吗?还是您在 Solaris 上使用 GNU make?

为什么要尝试使用 make 函数?如果你想完全可移植,你必须使用 shell 进行循环:

run: $(PROGS)
for p in $(PROGS); do ./$$p; done

如果您在 Solaris 上使用 GNU make,您可以使用 GNU make 模式规则以更“类似 make”的方式执行此操作:

run: $(PROGS:%=run-%)

run-%: %
./$<

.PHONY: run $(PROGS:%=run-%)

关于c - 设计可移植的 makefile 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26444661/

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