我正在尝试编译一个简单的程序
#include
路径gtkmm.h
是/usr/include/gtkmm-2.4/gtkmm.h
.除非我特别说明,否则g ++不会看到此文件-I /usr/include/gtkmm-2.4
.
我的问题是,如何让g ++自动查看/usr/include
其中包含的所有头文件的所有目录的递归,为什么这不是默认操作?
在这种情况下,正确的做法是pkg-config
在你的Makefile
或者buildcripts中使用:
# 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 $@
如果你失踪了gtkmm-2.4
,这将产生
$ 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.
否则,您将获得所有适当的路径和库,而无需手动指定所有路径和库.(检查输出pkg-config --cflags --libs gtkmm-2.4
:远远超过你想要手动输入的数量.)