As you have written it, the build
target will need to do something different depending on whether you have just done an ocelot or cuda build. That's another way of saying you have to parameterise build
in some way. I suggest separate build targets (much like you already have), with associated variables. Something like:
build-cuda: cudaLib
build-ocelot: ocelotLib
build-cuda build-ocelot:
shell commands
which invoke ${opts-$@}
On the command-line you type make build-cuda
(say). Make first builds cudaLib
, then it carries out the recipe for build-cuda
. It expands the macros before calling the shell. $@
in this case is build-cuda
, thus ${opts-$@}
is first expanded to ${opts-build-cuda}
. Make now goes on to expand ${opts-build-cuda}
. You will have defined opts-build-cuda
(and of course its sister opts-build-ocelot
) elsewhere in the makefile.
P.S. Since build-cuda
et. al. are not real files, you had better tell make this (.PHONY: build-cuda
).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…