我刚写了简单的make文件来编译任意数量的文件。当我添加-I标志来添加包含目录时,它不起作用。
CC=g++
CFLAGS=-I./inc
DEPS = add.h mul.h
OBJ = main.o add.o mul.o
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
main: $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)
以下是我执行make时的输出。你可以看到-I./inc缺失
~/PGMS/testMakeFile > make
g++ -c -o main.o main.cc
main.cc:1:17: fatal error: add.h: No such file or directory
我已经浪费了很长时间来解决这个问题,有人可以帮我解决这个问题吗?
答案 0 :(得分:5)
您编写的用于处理.o
文件的规则永远不会被调用,因为它是从%.c
文件而不是%.cc
文件构建的。因此,使用make
和.cc
C ++变量调用$(CXX)
$(CXXFLAGS)
文件的隐式规则。
将CFLAGS=-I./inc
更改为CXXFLAGS += -I./inc
,它应该有效。
所有这一切,-I
标志是预处理器标志,这意味着您实际上应该使用CPPFLAGS
变量(并且它将继续按预期工作,因为隐式使用CXXFLAGS
和CPPFLAGS
。
因此可以简化您的makefile:
OBJ := main.o add.o mul.o
DEP := add.h mul.h
CPPFLAGS := -Iinc
main: $(OBJ)
$(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@
$(OBJ): $(DEP)
答案 1 :(得分:0)
看起来您没有.cc文件规则(请注意您的自定义规则是将.c文件转换为.o文件)。
请注意,在gnu make(至少)中,默认的c ++规则(即.cc文件)默认使用CXXFLAGS变量。见the GNU make