我在弄清楚如何制作它时遇到了很多麻烦,以便我可以为客户端制作两个可执行文件,具体取决于我如何运行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
答案 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替换了手动列出的输出和输入文件,以避免重复。)
如果您想使用make
和make MODE=normal
(或类似),那么您可以这样做:
ifneq (normal,$(MODE))
EXTRA_OBJECTS := open.o close.o
endif
client: client.o $(EXTRA_OBJECTS)
gcc -g -o $@ $^