Makefile 目标的可选味道

Makefile 目标的可选味道,makefile,Makefile,我想在编译时管理一些特性和设置特定的怪癖。因此,我必须能够修改必须编译的对象列表,以生成最终目标compile命令和link命令。到目前为止,我只需要使用两种风格的程序,其中另一种(比如说special)只是添加了一些cxflags和一个对象文件: specialclient: CXXFLAGS+=-DSPECIALBUILD specialclient: LDFLAGS+=-lanotherlib specialclient: libanotherlib client 其中,client是正

我想在编译时管理一些特性和设置特定的怪癖。因此,我必须能够修改必须编译的对象列表,以生成最终目标compile命令和link命令。到目前为止,我只需要使用两种风格的程序,其中另一种(比如说
special
)只是添加了一些
cxflags
和一个对象文件:

specialclient: CXXFLAGS+=-DSPECIALBUILD
specialclient: LDFLAGS+=-lanotherlib
specialclient: libanotherlib client
其中,
client
是正常目标。但现在我需要另一个可选择的特性(比如说
奇特的
),事情开始变得复杂起来,因为我希望能够选择这些特性的任意组合;但是我不想为
peculiarclient
specialsecuriarclient
指定目标。我希望能够在命令行中指定每个功能,比如
make[special][special]client

如何解决这个问题?

有些人应该这样做:

ifdef SPECIAL
CXXFLAGS+=-DSPECIALBUILD
LDFLAGS+=-lanotherlib
client: libanotherlib
endif

ifdef PECULIAR
CXXFLAGS+=-DPECULIARBUILD
LDFLAGS+=-lyetanotherlib
client: libyetanotherlib
endif
现在您可以
makeclient
makeclient SPECIAL=1
makeclient SPECIAL=yes
makeclient SPECIAL=TRUE SPECIAL=very
,或其他任何方式