下一个makefile从其命令行arg -ARGS接收要编译的文件。例如
使ARGS =“out.c”
我想用变量ARGS替换创建的可执行文件“run”的名称,不包括后缀
在这个例子中是:run =“out”
all: Task1
Task1: outputs/output.o
gcc -g -m32 -Wall -o run outputs/output.o
outputs/output.o: outputs/${ARGS}
gcc -m32 -g -w -Wall -ansi -c -o outputs/output.o outputs/${ARGS}
.PHONY: clean
run: clean Task1
clean:
rm -f outputs\output.o Task1
答案 0 :(得分:2)
做你要求的粗暴方式就是:
EXEC := $(basename $(ARGS))
all: Task1
Task1: outputs/output.o
gcc -g -m32 -Wall -o $(EXEC) outputs/output.o
更好的方法是:
EXEC := $(basename $(ARGS))
all: $(EXEC)
$(EXEC): outputs/output.o
gcc -g -m32 -Wall -o $(EXEC) outputs/output.o
更好的是:
EXEC := $(basename $(ARGS))
all: $(EXEC)
$(EXEC): outputs/output.o
gcc -g -m32 -Wall -o $@ $^
答案 1 :(得分:1)
如果使用GNU make,您需要basename功能,可能需要$(basename $(AUX))
。也许像$(*F)
这样的变量也可能有用(请阅读文档)。但是,您的Makefile
可能不对。
我不能提出改进建议,因为你想要做和将要发生的事情尚不清楚。
BTW,使用remake(作为remake -x
)或至少make --trace
(最近有足够的GNU make 4.x)来了解make
正在做什么以及为什么
此外,您还会找到Makefile
- s的几个例子:here& there
等等......别忘了make
有很多内置规则,你可以通过make -p
通过阅读documentation GNU make,以及一些教程和Makefile
- s的一些示例