Makefile条件语句

时间:2013-10-07 18:45:54

标签: c++ makefile gnu-make

场景:

考虑一个源目录,它有多个“.cpp”文件,用于创建静态库 考虑文件:XYZ.cpp& ABC.cpp(具体用于下面描述的条件)以及PQR.cpp,JKL.cpp等..,输出库名称是out.a

这里p(是一个环境变量),其值与q匹配,然后, out.a应该使用XYZ.cpp创建,否则应该使用ABC.cpp

创建

Ex:即这样的事情

ifeq($p, q)
SRC = XYZ.cpp
else
SRC = ABC.cpp
endif
SRC += PQR.cpp \
       JKL.cpp \
       MNO.cpp

我怎么能在Makefile中做同样的优化?

提前感谢您的帮助......

2 个答案:

答案 0 :(得分:1)

这几乎就是它。您只需要ifeq之后的空格(以及p周围的一些括号,以防您想使用长于一个字母的变量名称):

ifeq ($(p), q)
SRC = XYZ.cpp
else
SRC = ABC.cpp
endif
SRC += PQR.cpp \
       JKL.cpp \
       MNO.cpp

答案 1 :(得分:0)

虽然Beta的答案非常正确,但您也可以考虑构造变量名称。在我看来,它们导致更清晰,更易读的makefile。例如:

# if p is not set, default to "default"
p ?= default

q_SRC = XYZ.cpp
default_SRC = ABC.cpp

SRC = $($(p)_SRC) PQR.cpp JKL.cpp MNO.cpp

等。特别是如果你有很多选择,这可以更容易理解(再次,IMO)。