1

我想创建一个通用的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.
4

2 回答 2

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
于 2012-04-10T13:07:17.757 回答
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
于 2012-04-10T08:18:57.430 回答