具有多个可执行文件的Makefile

Rae*_*ven 8 c makefile

我正在尝试编写一个makefile,它使用宏一次从多个文件创建多个可执行文件.我试着通过以前回答的问题进行搜索,但是因为我对C语言编程以及与gcc一起工作相当新,所以我无法找到问题的答案.

这是我到目前为止:

CC=gcc
CFLAGS=-I.
OBJ = ex1.c ex3.c
EXECUTABLE = ex1 ex3

$(EXECUTABLE): $(OBJ)
    gcc -o $@ $^ $(CFLAGS)

clean:
    rm -f $(EXECUTABLE)
Run Code Online (Sandbox Code Playgroud)

我想要这条线

$(EXECUTABLE): $(OBJ)
Run Code Online (Sandbox Code Playgroud)

分别从文件ex1.c ex3.c创建可执行文件ex1和ex3.

Jen*_*ens 16

对于这种特殊情况,每个可执行文件都有一个带.c扩展名的源文件,您只需要一行Makefile:

all: ex1 ex3
Run Code Online (Sandbox Code Playgroud)

然后内置的默认规则make已经工作:

$ make
cc -O2 -pipe   ex1.c  -o ex1
cc -O2 -pipe   ex3.c  -o ex3
Run Code Online (Sandbox Code Playgroud)

在幕后,make使用POSIXly强制内置单后缀规则

.c:
    $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
Run Code Online (Sandbox Code Playgroud)

根据自己的喜好改变命令make CC=gcc CFLAGS=-O2 LDFLAGS=-s.

当天的琐事:实际上,如果你愿意在调用时命名目标make,你可以使用空的甚至是没有任何Makefile的运行:

$ make -f /dev/null CC=gcc CFLAGS=-O2 LDFLAGS=-s ex1 ex3
gcc -O2 -s ex1.c  -o ex1
gcc -O2 -s ex3.c  -o ex3
$ rm -f Makefile ex1 ex3
$ make CC=gcc CFLAGS=-O2 LDFLAGS=-s ex1 ex3
gcc -O2 -s ex1.c  -o ex1
gcc -O2 -s ex3.c  -o ex3
Run Code Online (Sandbox Code Playgroud)

制造魔法!

根据经验,不要重新发明轮子(或规则),使用已经存在的规则.它简化了你的生活并使生活变得更加美好.这使得小型和性感的makefile给女士留下深刻印象:-)

  • 很有帮助!感谢您对make命令的内部工作方式有所了解. (2认同)