我有一个名为"main.c"的文件。请问最简单的Makefile,以便将此文件编译成可执行文件,我可以像
./blah
一样运行它?./blah
一样运行它?all:
gcc -o blah main.c
你不需要Makefile,一个简单的Shell脚本就可以。
make
时,它返回"Makefile:2: *** missing separator. Stop." - Ashgcc
前面的那一段必须是一个制表符,而不是空格。(如果你使用空格就会出现那个错误。) - T.J. Crowderblah
而不是all
,因为这是实际命令生成的文件名。否则,make无法正确计算依赖关系。 - CB Bailey如果你正在使用GNU Make,并且不需要链接额外的库,那么最简单的makefile就是没有任何makefile。尝试:
make main
如果您不想指定main
,那么可以使用以下单行Makefile:
all: main
GNU Make有几个隐式规则,如果您没有自己定义它们,它就会使用它们。使此工作的规则类似于:
%: %.c
$(CC) $^ -o $@
更多信息请参见:http://www.gnu.org/software/make/manual/make.html#Using-Implicit
blah
,最简单的方法就是将你的源文件重命名为 blah.c
(如果允许的话)。 - Jens Gustedtblah
似乎不是一个要求,而是一个例子:OP说“我可以像运行./blah
一样运行”。因此,这个单行的 Makefile
看起来很好。 - MestreLionall: blah
blah: main.c
gcc main.c -o blah
all: blah
让这个过程变得比必要的复杂,并且如果存在一个名为 all
的文件,它也可能会破坏一些东西。除了这一点,这是最好的答案。 - CB Baileymyprog: myprog.o
$(CC) -o $@ @^
myprog.c
编译为myprog.o
的单独步骤。我喜欢这种方式胜过其他答案(Arnaud提供的),因为它适用于更多的源文件,而不需要显著扩大makefile:myprog: myprog.o foo.o bar.o helper.o my.o your.o his.o her.o
$(CC) -o $@ @^
$^
而不是 @^
吗? - user2023370blah.c
的单个文件,你可以使用以下命令输出一个名为blah
的可执行文件:all: blah
。
blah:
使用GNU make
时,其他一切都是隐含的。
虽然这非常简单,但它比一些更复杂的答案具有一些优点:
gcc
!*.o
文件,适用于此简单项目。话虽如此,我强烈建议您通过添加至少clean
和all
规则以及-Wall
标志来改进您的Makefile
。 这可以使用以下Makefile
完成,同时保留上述所有优点:
TARGET=blah CFLAGS=-Wall
.PHONY: all clean
all: $(TARGET) $(TARGET):
clean: rm -f $(TARGET)