gpt4 book ai didi

c++ - 如何使用一个 makefile 构建可执行文件的变体?

转载 作者:太空狗 更新时间:2023-10-29 19:47:02 24 4
gpt4 key购买 nike


我有一组源文件,我需要从中生成可执行文件的多个变体。例如,我需要从相同的 ma​​in.c 生成 app1.elfapp2.elfapp3.elf> 和 comm.c。每个应用程序之间的区别在于节点地址,这是在调用 gcc 时向下传递的参数。即:

gcc -DNODE=1 -oapp1.elf main.c 
gcc -DNODE=2 -oapp2.elf main.c
gcc -DNODE=3 -oapp3.elf main.c

假设我有以下文件:

  • src/main.c
  • src/comm.c

当我这样运行 Makefile 时:

make all_nodes

make 仅构建具有以下输出的 app1.elf:

Built app1
Built app2
Built app3

失败!输出似乎表明它有效,但它只生成一个可执行文件,即 app1.elf。有人愿意指出我做错了什么吗?

为了进一步解释我的 Makefile,我创建了一个 cleanobjs 目标来清除 ./obj 子目录中的对象。这是我尝试使用新的 node 地址“make”重建 obj 文件,但失败了。我是否以不打算使用的方式使用“make”?我知道我也可以创建一个批处理文件来运行 make(我已经成功完成了)但我想知道我做错了什么。我的 Makefile 如下:

obj/%.o: src/%.c
gcc -DNODE=$(NODE) -o$@ $<

app.elf : ./obj/main.o ./obj/comm.o
gcc -oapp$(NODE).elf main.o comm.o

node1 : NODE=1
node1 : cleanobj app.elf
@echo 'Built app1'

node2 : NODE=2
node2 : cleanobj app.elf
@echo 'Built app2'

node3 : NODE=3
node3 : cleanobj app.elf
@echo 'Built app3'

all_nodes : node1 node2 node3

cleanobj :
rm -rf obj/main.o obj/comm.o

.PHONY : cleanobj

最佳答案

您将需要针对不同版本的多个目标。每个目标也需要自己的 main.o 和 comm.o 目标,这意味着您需要给它们起别的名字,否则它们最终会相互混淆。然后你的所有功能都应该构建所有这三个。

关于c++ - 如何使用一个 makefile 构建可执行文件的变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4651474/

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