Makefile依赖于make run的一个可执行文件的两个变体

时间:2015-10-27 20:24:38

标签: makefile

我在弄清楚如何制作它时遇到了很多麻烦,以便我可以为客户端制作两个可执行文件,具体取决于我如何运行make。只运行" make"我希望客户像这样:

client: client.o open.o close.o
    gcc -g -o client client.o open.o close.o

然后当我跑步时#34;正常"我希望客户是这样的:

client: client.o
    gcc -g -o client client.o

我只是不知道如何去做这件事,我已经有一段时间了,并且找不到任何简单而有帮助的东西。整个makefile位于下方,将其全部放在上下文中。

all:    client host tstWrappers

client: client.o open.o close.o
    gcc -g -o client client.o open.o close.o

client.o: client.c
    gcc -g -c client.c

host: host.o
    gcc -g -o host host.o

host.o: host.c
    gcc -g -c host.c

tstWrappers: tstWrappers.o open.o close.o
    gcc -g -o tstWrappers tstWrappers.o open.o close.o

tstWrappers.o: tstWrappers.c
    gcc -g -c tstWrappers.c

open.o: open.c
    gcc -g -c open.c

close.o: close.c
    gcc -g -c close.c


clean:  
    rm -f client host client.o host.o tstWrappers tstWrappers.o open.o close.o

1 个答案:

答案 0 :(得分:0)

这里最简单的做法可能就是复制目标:

client: client.o open.o close.o
    gcc -g -o $@ $^

client-normal: client.o
    gcc -g -o $@ $^

然后运行make client-normal以生成client-normal二进制文件。

(请注意,我用适当的Automatic Variables替换了手动列出的输出和输入文件,以避免重复。)

如果您想使用makemake MODE=normal(或类似),那么您可以这样做:

ifneq (normal,$(MODE))
EXTRA_OBJECTS := open.o close.o
endif

client: client.o $(EXTRA_OBJECTS)
    gcc -g -o $@ $^