我想创建一个通用的makefile,它可以将源文件名编译成它,将其保存为目标文件和可执行文件。两个文件都使用原始源名称。谢谢您的帮助。
exec: \
compile
./helloworld #I would like to input source outside the make file.
compile: \
helloworld.c
gcc -Wall helloworld.c -o helloworld #<==
echo 'compiling'
touch compile
#I would like makefile to automatically save both object and exec.
#as the source file name.
答案 0 :(得分:1)
您可以使用$(MAKECMDGOALS)
变量:
CFLAGS = -Wall
$(MAKECMDGOALS): $(MAKECMDGOALS).o
然后简单地调用Make这样:
make myfile
如果你有Make 3.81或更高版本,那么这可以成为:
CFLAGS = -Wall
.SECONDARY: # Prevents intermediate files from being deleted
如果您对保存中间对象文件不感兴趣,那么您甚至不需要Makefile。你可以这样做:
make bar CFLAGS=-Wall
答案 1 :(得分:1)
Make具有内置规则,这些规则知道如何从源文件创建可执行文件(如果它们具有相同的名称)。所以你甚至根本不需要makefile!
$ ls
foobar.c
$ make foobar
cc foobar.c -o foobar
不是没有必要搞乱.SECONDARY因为make有一个直接规则来从.c构建可执行文件,而不首先编译.o(所以没有中间文件)。即使它没有,这里保留.o文件没有任何优势,所以这不值得额外的努力(IMO)。
如果你想改变编译器或标志,你可以有一个除了一些变量赋值之外什么都没有的makefile:
$ ls
foobar.c Makefile
$ cat Makefile
CC = gcc
CFLAGS = -Wall
$ make foobar
gcc -Wall foobar.c -o foobar