How to manually call another target from a make target?

后端 未结 3 1500
失恋的感觉
失恋的感觉 2020-12-13 01:48

I would like to have a makefile like this:

cudaLib :
    # Create shared library with nvcc

ocelotLib :
    # Create shared library for gpuocelot

build-cuda         


        
3条回答
  •  旧时难觅i
    2020-12-13 02:29

    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).

提交回复
热议问题