GNU Make - 动态创建的变量名称

 丫头片子ZXH 发布于 2023-01-08 14:08

我有一个makefile设置,它接受一个命令行参数,该参数在构建时被解析以确定使用哪个编译器CPULIST.

所以,我计划通过以下命令构建:make all CPULIST="arm x86".然后我创建了一些虚假的规则,以便make all循环并有效地执行:

make all CPULIST=x86
make all CPULIST=arm

规则:

.PHONY: all
all:
    @echo "Detected CPULIST:${CPULIST_DETECTED}"
    @echo "CPULIST:${CPULIST}"
    @for cpu in $(CPULIST_DETECTED); do         \
        echo "CPU:$${cpu}";                      \
        variant_$${cpu}=abc;                        \
        echo "variant_$${cpu}: $${variant_x86}"; \
        $(MAKE) build CPULIST=$$cpu;             \
    done
    @true

.PHONY: build
build: sanity_check $(TARGET)
    @true

如果这是一个bash脚本,我会使用variant_${cpu}它,例如,让它动态创建变量名称和赋值,如:

variant_x86=abc;
variant_arm=abc;

似乎我没有让转义序列正确,至少在GNU make语法中是这样.

构建list_algorithms.o的依赖项文件

Detected CPULIST:x86 arm
CPULIST:test arm x86
CPU:x86
/bin/sh: 3: variant_x86=abc: not found
variant_x86:
make[1]: Entering directory `/home/svn/public/lib/libMYLib'
CPULIST:x86

我好像有两个问题:

    我的字符串扩展似乎是makefile在扩展后尝试执行的东西

    我似乎没有任何分配variant_x86,所以语法是关闭的.

我该如何解决这两个问题?

谢谢.

1 个回答
  • 这与make无关.正如你所写的那样,你想要做的事情在shell中是不合法的.您无法在shell中创建"动态变量名称",如下所示:

    $ a=foo
    $ xxx$a=baz
    xxxfoo=baz: command not found
    

    如果你想在shell中执行此操作,则必须使用eval:

    $ a=foo
    $ eval xxx$a=baz
    $ echo $xxxfoo
    baz
    

    所以重写你的make规则:

    all:
            @echo "Detected CPULIST:${CPULIST_DETECTED}"
            @echo "CPULIST:${CPULIST}"
            @for cpu in $(CPULIST_DETECTED); do          \
                echo "CPU:$${cpu}";                      \
                eval variant_$${cpu}=abc;                \
                echo "variant_$${cpu}: $${variant_x86}"; \
                $(MAKE) build CPULIST=$$cpu;             \
            done
    

    此外,@true在此配方的末尾添加a 是没有用的.

    2023-01-08 14:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有