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.