0

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

specialclient: CXXFLAGS+=-DSPECIALBUILD
specialclient: LDFLAGS+=-lanotherlib
specialclient: libanotherlib client

哪里client是正常目标。但是现在我需要另一个可选特征(比如peculiar),事情开始变得复杂,因为我希望能够选择特征的任意组合;但我不想为peculiarclientand指定目标specialpeculiarclient。我希望能够在命令行中指定每个功能,例如make [special] [peculiar] client.

我怎么解决这个问题?

4

1 回答 1

0

一些条件应该可以解决问题:

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, 或其他任何东西。

于 2012-10-22T16:18:26.733 回答