我需要 GNU make 来创建 2 个目标文件并选择性地执行特定目标

I need GNU make to create 2 target files and optionally execute a specific target

提问人:fjordan 提问时间:11/14/2023 最后编辑:fjordan 更新时间:11/15/2023 访问量:27

问:

我有以下makefile:

DATA_DIR = ../support/flash_data
SRC = $(DATA_DIR)/flash_data.flash

flash_data.flash: config.mk
    cp $(SRC) $@

flash_data1.flash: config.mk
    cp $(SRC) $@

test:
    @echo --- test

我希望“make”将生成两个文件(flash_data.flash 和 flash_data1.flash),而“make test”将生成 2 个文件和消息。

此外,如果 config.mk 更改,则应在输入“make test”时重新生成文件。

但是,如果我“make test”,我只得到消息,如果我只是“make”,则只会创建flash_data.flash。

我错过了什么?

生成文件

评论

1赞 MadScientist 11/14/2023
如果未在 make 命令行上指定目标,则仅生成生成文件中的第一个目标。请参见:gnu.org/software/make/manual/html_node/How-Make-Works.html
1赞 MadScientist 11/14/2023
一个常见的约定是创建一个目标作为生成文件中的第一个目标,该生成文件列出了默认情况下要构建的其他目标作为先决条件。all:
0赞 HardcoreHenry 11/15/2023
请注意,目标应标记为虚假all:
0赞 UpAndAdam 11/15/2023
test不依赖于任何其他规则,因此不会触发它们make test
0赞 fjordan 11/15/2023
感谢所有回复。我更新了依赖项,现在它按预期工作。

答:

0赞 fjordan 11/15/2023 #1

最终版本如下所示:

test: flash_data.flash
    @echo --- test
    cat flash_data.flash > lix

flash_data.flash: config.mk
    cp $(SRC) $@
    python update_flash_data.py 1 2 3 4 5 --output $@

“make test”做了它应该做的事情...... 谢谢。。。