sintaxis recursivos recursividad informatica indirecta funcion ejemplos arreglos algoritmos c++ g++

c++ - recursivos - recursividad informatica



g++ incluye todo/usr/include recursivamente (3)

Estoy tratando de compilar un programa simple, con

#include <gtkmm.h>

El camino a gtkmm.h es /usr/include/gtkmm-2.4/gtkmm.h . g ++ no ve este archivo a menos que específicamente lo indique -I /usr/include/gtkmm-2.4 .

Mi pregunta es, ¿cómo puedo hacer que g ++ mire automáticamente de forma recursiva a través de todos los directorios en /usr/include para todos los archivos de encabezado contenidos en él, y por qué esta no es la acción predeterminada?


¿Supongo que no estás usando un archivo MAKE? Lo único que podría ser molesto es tener que escribir la opción larga -I cada vez que compila su programa. Un makefile lo hace mucho más fácil.

Por ejemplo, puede modificar el archivo MAKEL WORLD de wikipedia a algo como lo siguiente:

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


En este caso, lo correcto es usar pkg-config en su Makefile o 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 $@

Si te estás perdiendo gtkmm-2.4 , esto producirá

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

De lo contrario, obtendrás todas las rutas y bibliotecas apropiadas para ti, sin especificarlas todas a mano. (Compruebe la salida de pkg-config --cflags --libs gtkmm-2.4 : eso es mucho más de lo que desea escribir a mano, nunca).


No puedes. El objetivo de incluir rutas es para que pueda escoger y elegir qué desea y qué versiones.

Lo que podrías hacer es ...

#include <gtkmm-2.4/gtkmm.h>

Lo cual lograría el mismo efecto.