我有一个 makefile 来制作一个包含 2 个源文件和一个标头的项目。
.PHONY: clean delete run
CC = g++
CFLAGS = -g -Wall
CXXFLAGS = $(CFLAGS)
SRC = /home/user/dev/nCPrograms/Flagger/src/theclass.cpp /home/user/dev/nCPrograms/Flagger/src/main.cpp
OBJ = $(SRC:.cpp=.o)
INC = -I/home/user/dev/nCPrograms/Flagger/header
EXECUTABLE = Flagger all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJ)
$(CC) $(CFLAGS) $(INC) -o $@ $^ %%.o: %%.cpp
$(CC) $(CFLAGS) $(INC) -c -o $@ $< clean:
rm -rf $(OBJ) delete:
rm -rf $(OBJ) $(EXECUTABLE) run:
./$(EXECUTABLE)
当我使用
make
运行它时,它会输出正在运行的命令(不带 -I 标志):
g++ -g -Wall -c -o /home/user/dev/nCPrograms/Flagger/src/theclass.o /home/user/dev/nCPrograms/Flagger/src/theclass.cpp
然后失败并出现错误,因为其中一个包含依赖于 -I 标志。
/home/user/dev/nCPrograms/Flagger/src/theclass.cpp:1:10: fatal error: theclass.h: No such file or directory 1 | #include <theclass.h> | ^~~~~~~~~~~~ compilation terminated. make: *** [<builtin>: /home/user/dev/nCPrograms/Flagger/src/theclass.o] Error 1
我尝试过
@echo
'ing $(INC)
变量(效果很好),并在各处移动参数并添加/删除引号。我对 make 语法不太熟悉,因此任何关于为什么 -I 标志没有出现的帮助将不胜感激。就其价值而言,包含路径和 #include 指令在 clangd 中以及手动编译时工作得很好。
非常抱歉, 没有正确复制,这是文件
.PHONY: clean delete run
CC = g++
CFLAGS = -g -Wall
CXXFLAGS = $(CFLAGS)
SRC = /home/hk_grub/dev/nCPrograms/Flagger/src/theclass.cpp /home/hk_grub/dev/nCPrograms/Flagger/src/main.cpp
OBJ = $(SRC:.cpp=.o)
INC = -I/home/user/dev/nCPrograms/Flagger/header
EXECUTABLE = Flagger
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJ)
$(CC) $(CFLAGS) $(INC) -o $@ $^
%%.o: %%.cpp
$(CC) $(CFLAGS) $(INC) -c -o $@ $<
clean:
rm -rf $(OBJ)
delete:
rm -rf $(OBJ) $(EXECUTABLE)
run:
./$(EXECUTABLE)