makefile - 参数化 Makefile 目标

标签 makefile gnu

我有一个参数空间,比如 A={1,2},B={u,v},我需要为每对 (a,b) 创建一个文件在A x B 。 我需要生成的是一组 Makefile 目标,例如:

file_1_u.csv:
    ./run_program --A 1 --B u > file_1_u.csv
file_1_v.csv:
    ./my_program --A 1 --B v > file_1_u.csv
file_2_u.csv:
    ./run_program --A 2 --B u > file_1_u.csv
file_2_v.csv:
    ./my_program --A 2 --B v > file_1_u.csv

是否可以生成目标并在每个生成的目标中使用相关参数?

PS: 我知道可以使用变量创建目标,但是 $@仅给出完整的目标名称(例如 file_1_u.csv )。相反,我需要 ab单独将它们作为参数传递给 my_program .

最佳答案

一般来说,在 makefile 中处理模式中的 1 个以上元素需要 eval、$$、include 和其他非直接处理。

但是,在您的具体示例中,有一个明显的替换可以像这样使用:

A:=1 2
B:=u v
l:=$(foreach a, $(A), $(foreach b, $(B), $(a)_$(b)))

all: $(l:%=file_%.csv)

file_%.csv:
        ./run_program --A $(subst _, --B ,$*) > $@

关于makefile - 参数化 Makefile 目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36872269/

相关文章:

c++ - 如何让CMake在任何地方自动添加MagickWand库链接

ubuntu - 使用 glib 和 dbus dbus_g_value_build_g_variant 构建 Maliit 时出错

C - 解压缩 Gzipped http 响应

objective-c - 为什么 Objective-C 有原生的 autoconf 支持?

使用Makefile : how to do it right for several programs?进行编译

makefile - 在 Makefile 中获取最后一个进程的 PID

linux - 了解 Makefile 的基本概念

c - `lseek` 如何帮助确定文件是否为空?

c++ - 与 Mergesort 相比,为什么 GNU 并行快速排序这么慢?

linux - 带有项目列表的 makefile 过程变量,其中一项是带空格的引号字符串