Ren*_*ith 1 compiler-construction makefile
我刚写了简单的make文件来编译任意数量的文件.当我添加-I标志来添加include目录时,它无法正常工作.
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)
Run Code Online (Sandbox Code Playgroud)
以下是我执行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
Run Code Online (Sandbox Code Playgroud)
我已经浪费了很长时间来解决这个问题,有人可以帮我解决这个问题吗?
您编写的处理.o文件的规则永远不会被调用,因为它是从%.c文件而不是%.cc文件构建的.因此,使用和C++变量调用文件make的隐式规则..cc$(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)
Run Code Online (Sandbox Code Playgroud)