我想在编译时管理一些功能并设置特定的怪癖。因此,我必须能够修改必须编译的对象列表以生成最终目标,即编译命令和链接命令。到目前为止,我只需要使用两种程序,另一种(比如special
)只添加了一些CXXFLAGS
和一个目标文件:
specialclient: CXXFLAGS+=-DSPECIALBUILD
specialclient: LDFLAGS+=-lanotherlib
specialclient: libanotherlib client
其中client
是正常目标。但现在我需要另一个可选功能(比如peculiar
),事情开始变得复杂,因为我希望能够选择任何功能组合;但我不想指定peculiarclient
和specialpeculiarclient
的目标。我希望能够在命令行中指定每个功能,例如make [special] [peculiar] client
。
我该如何解决这个问题?
答案 0 :(得分:0)
有些conditionals可以做到这一点:
ifdef SPECIAL
CXXFLAGS+=-DSPECIALBUILD
LDFLAGS+=-lanotherlib
client: libanotherlib
endif
ifdef PECULIAR
CXXFLAGS+=-DPECULIARBUILD
LDFLAGS+=-lyetanotherlib
client: libyetanotherlib
endif
现在您可以make client
,make client SPECIAL=1
,make client PECULIAR=yes
,make client SPECIAL=TRUE PECULIAR=very
或其他任何内容。