How can I define #define in my Make files

后端 未结 3 1410
借酒劲吻你
借酒劲吻你 2021-02-07 18:02

In my c/c++ files, there are multiple #define. As an example:

#ifdef LIBVNCSERVER_HAVE_LIBZ
  /* some code */
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
  /* some more cod         


        
相关标签:
3条回答
  • 2021-02-07 18:17

    Don't modify your Makefile.in. (and consider using Automake and converting your Makefile.in to a much simpler Makefile.am). The whole point of those #defines is to let the configure script define them in config.h, and your source files should #include <config.h>. If you are maintaining the package, you will need to write tests in configure.ac to determine whether or not the system being used has libvncserver installed with jpeg and zlib support. If you modify Makefile.in to always define them, then you are making the assumption that your code is only being built on machines where those features are available. If you make that assumption, you should still add checks to configure.ac to confirm it, and have the configure script fail if the dependencies are not met.

    0 讨论(0)
  • 2021-02-07 18:25

    Add the line below, to your makefile:

    DEFINES=LIBVNCSERVER_HAVE_LIBZ LIBVNCSERVER_HAVE_LIBJPEG
    ...
    ... further on in your makefile on the line where it says ....
    ...
        $(cc) ($(addprefix -D, $(DEFINES))) .....
    ...
    ...
    

    This is to serve as an example, you only add another define to the DEFINES variable which gets referenced on the line as shown $(cc) -D$(DEFINES) in which the make will automatically expand the variable and compile those that are #ifdefd.

    Thanks to R Samuel Klatchko for pointing out a small amiss...this is specifically for GNU's make, you can use addprefix do properly do that ($(addprefix -D, $(DEFINES))).

    0 讨论(0)
  • 2021-02-07 18:34
    -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG
    

    You could pass those in CPPFLAGS,

    CPPFLAGS = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG
    

    or make new variable

    CUSTOMDEFINES = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG
    

    and pass it to CPPFLAGS = -DEXISTINGFLAGS $(CUSTOMDEFINES)

    Those are finally will pass to gcc/g++ -D...

    $(CC) $(CPPFLAGS)
    
    0 讨论(0)
提交回复
热议问题