g++ include all /usr/include recursively

前端 未结 3 1844
余生分开走
余生分开走 2020-12-17 17:36

I\'m trying to compile a simple program, with

#include 

The path to gtkmm.h is /usr/include/gtkmm-2.4/gt

相关标签:
3条回答
  • 2020-12-17 18:00

    You can't. The whole point of include paths is so you can pick and choose what you want and what versions.

    What you could do is..

    #include <gtkmm-2.4/gtkmm.h>
    

    Which would achieve the same effect.

    0 讨论(0)
  • 2020-12-17 18:10

    In this case, the correct thing to do is to use pkg-config in your Makefile or buildscripts:

    # Makefile
    ifeq ($(shell pkg-config --modversion gtkmm-2.4),)
      $(error Package gtkmm-2.4 needed to compile)
    endif
    
    CXXFLAGS += `pkg-config --cflags gtkmm-2.4`
    LDLIBS += `pkg-config --libs gtkmm-2.4`
    
    BINS = program
    program_OBJS = a.o b.o c.o
    
    all: $(BINS)
    
    program: $(program_OBJS)
            $(CXX) $(LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -o $@
    
    # this part is actually optional, since it's covered by gmake's implicit rules
    %.o: %.cc
            $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@
    

    If you're missing gtkmm-2.4, this will produce

    $ make
    Package gtkmm-2.4 was not found in the pkg-config search path.
    Perhaps you should add the directory containing `gtkmm-2.4.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'gtkmm-2.4' found
    Makefile:3: *** Package gtkmm-2.4 needed to compile.  Stop.

    Otherwise, you'll get all the appropriate paths and libraries sucked in for you, without specifying them all by hand. (Check the output of pkg-config --cflags --libs gtkmm-2.4: that's far more than you want to type by hand, ever.)

    0 讨论(0)
  • 2020-12-17 18:19

    I guess you are not using a makefile? The only thing that could be annoying is having to type the long -I option each time you compile your program. A makefile makes it a lot easier.

    For example, you could modify the hello world makefile from wikipedia to something like the following:

    INC=-I/usr/include/gtkmm-2.4/
    
    helloworld: helloworld.o
        g++ -o $@ $<
    
    helloworld.o: helloworld.c
        g++ $(INC) -c -o $@ $<
    
    .PHONY: clean
    
    clean:
        rm -f helloworld helloworld.o
    
    0 讨论(0)
提交回复
热议问题