我正在尝试使用Makefile包含一些头文件。
这是我做的代码:
# Add .h and .hpp to the preprocessor build
HEADERS += $(wildcard src/*.h)
HEADERS += $(wildcard src/*.hpp)
HEADERS += $(wildcard src/**/*.h)
HEADERS += $(wildcard src/**/*.hpp)
INCLUDES = $(foreach HEADERS, $(HEADERS), -I$(dir $(HEADERS)))
# FLAGS will be passed to both the C and C++ compiler
FLAGS +=
CFLAGS +=
CXXFLAGS += $(INCLUDES)
但是一旦我构建,它就会执行:
g++ -Isrc/ -Isrc/ -Isrc/ -Isrc/misc/ -Isrc/widgets/ -Isrc/widgets/ -Isrc/widgets/ -Isrc/widgets/ -Isrc/widgets/ -Isrc/widgets/ -Isrc/widgets/ -Isrc/widgets/ -Isrc/widgets/ -Isrc/widgets/ -Isrc/widgets/ -Wsuggest-override -std=c++11 -DSLUG=NWK -fPIC -I../../include -I../../dep/include -O3 -DVERSION=0.6.4 -MMD -MP -g -march=nocona -ffast-math -fno-finite-math-only -Wall -Wextra -Wno-unused-parameter -DARCH_WIN -D_USE_MATH_DEFINES -c -o build/src/plugins/MyPlug.cpp.o src/plugins/MyPlug.cpp
似乎每个找到的.h
/ .hpp
都会复制HEADER
标志。
您将如何解决?
答案 0 :(得分:1)
一个简单的解决方案是仅通过$(sort ...)
进行搜索。在制作过程中,$(sort ...)
删除所有重复项:
INCLUDES = $(sort $(foreach HEADERS, $(HEADERS), -I$(dir $(HEADERS))))
一个注意事项-sort确实会更改包含目录的顺序,这反过来也会更改搜索目录的顺序,但是,您用来填充列表的方法似乎并不依赖于顺序,因此你应该很好。