makefile,它还获取文件的名称
我需要一个makefile,它还可以获取编译文件的名称 例如:makefile,它还获取文件的名称,makefile,Makefile,我需要一个makefile,它还可以获取编译文件的名称 例如: make foo and the makefile should compile foo.c to foo. 这是我的makefile。如何改变它 all: out out: out.o gcc -g -m32 -Wall -o out out.o out.o: out.c gcc -m32 -g -Wall -ansi -c -o out.o out.c .PHONY: clean #Clean the bu
make foo
and the makefile should compile foo.c to foo.
这是我的makefile。如何改变它
all: out
out: out.o
gcc -g -m32 -Wall -o out out.o
out.o: out.c
gcc -m32 -g -Wall -ansi -c -o out.o out.c
.PHONY: clean
#Clean the build directory
clean:
rm -f *.o out
没有直接的方法可以将参数传递给Makefile,但是可以利用变量来实现所需的功能。检查对下面的Makefile所做的修改
NAME?=out#如果不传递任何参数,则生成的默认二进制文件为out
${NAME}:${NAME}.o
gcc -g -m32 -Wall -o ${NAME} ${NAME}.o
${NAME}.o:${NAME}.c
gcc -m32 -g -Wall -ansi -c -o ${NAME}.o out.c
.PHONY:clean
#清理生成目录
clean:
`rm -f *.o ${NAME}`
您应该通过键入
$make NAME=foo
$make clean NAME=foo
直接向make传递参数非常简单
您当前的makefile可以通过makefoo
调用,并将编译foo.c
以生成foo
,因为make具有处理类似foo.c=>foo
的情况的隐式规则;即使“foo”不是任何规则的目标,也不会有错误。(至少,GNU Make 3.81就是这种情况,我正在使用它。)
如果您想控制编译器和标志的选择(如out
规则),可以使用多种方法。最简单的(虽然严格来说不是最好的)是修改makefile中的两个变量:
CC = gcc
CFLAGS = -g -m32 -Wall -ansi
另一个选项是使用您自己的模式规则覆盖隐式规则:
%: %.c
gcc -g -m32 -Wall -ansi -o $@ $<
一旦你掌握了基础知识,就有可能进行进一步的改进。应该是这样。你几乎同时发布了两条相互矛盾的评论。你还需要帮助吗?我认为这很有效…但不是。。一些想法?如果你给出了
make foo
,那么会返回一个错误,比如no rule to target foo
(这里foo不在目标列表中)谢谢你,但我认为有一种方法可以做到这一点,因为这是我作业中的要求。有人知道怎么做吗?你用的是什么版本的Make??
%: %.o
gcc -g -m32 -Wall -o $@ $^
%.o: %.c
gcc -m32 -g -Wall -ansi -c -o $@ $<
%: %.c