Make 省略 '-I' 标志 g++

问题描述 投票:0回答:1

我有一个 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 中以及手动编译时工作得很好。

makefile compilation g++
1个回答
0
投票

非常抱歉, 没有正确复制,这是文件

.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) 
© www.soinside.com 2019 - 2024. All rights reserved.