Makefile 找不到目录 C++
Makefile cant find directories C++
我正在从事与国际象棋相关的项目,我使用 makefile 来编译所有内容。我的目标是只编译已更改的文件,而不是每次都编译所有文件。文件夹结构可以看得更清楚here。 make main.o
导致错误:
fatal error: chesspieces.h: No such file or directory
5 | #include "chesspieces.h"
几乎所有其他东西都给我一个 No rule to make target .o . Stop
。我正在使用来自 chess/src 的 make,并且我的 Includes
变量中包含每个文件夹。在此处制作文件:
CC = g++
INCLUDES =-Icomponents -IBoard -Ipieces -IApplication
OUTPUT = -o Chess
Chess: main.o board.o player.o chess.o
$(CC) main.o board.o player.o chess.o $(OUTPUT)
main.o: main.cc board.h chess.h player.h chesspieces.h
$(CC) $(INCLUDES) -c main.cc
position.o: position.cc position.h
$(CC) $(INCLUDES) -c position.cc
piece.o: piece.cc piece.h color.h position.h
$(CC) $(INCLUDES) -c piece.cc
rook.o: rook.cc rook.h piece.h
$(CC) $(INCLUDES) -c rook.cc
queen.o: queen.cc queen.h piece.h
$(CC) $(INCLUDES) -c queen.cc
pawn.o: pawn.cc pawn.h piece.h
$(CC) $(INCLUDES) -c pawn.cc
knight.o: knight.cc knight.h piece.h
$(CC) $(INCLUDES) -c knight.cc
king.o: king.cc king.h piece.h
$(CC) $(INCLUDES) -c king.cc
bishop.o: bishop.cc bishop.h piece.h
$(CC) $(INCLUDES) -c bishop.cc
square.o: square.cc square.h color.h position.h
$(CC) $(INCLUDES) -c square.cc
board.o: board.cc board.h square.h position.h
$(CC) $(INCLUDES) -c board.cc
player.o: player.cpp player.h board.h piece.h
$(CC) $(INCLUDES) -c player.cc
chess.o: chess.cc chess.h player.h board.h piece.h
$(CC) $(INCLUDES) -c chess.cc
建立依赖关系我的想法是添加文件中包含的每个 header,对此不确定
编辑:在命令行上编译工作正常(除了链接错误)
g++ -Icomponents -IBoard -IPieces -Iapplication main.cc
所以 $(INCLUDES)
变量有问题,不知道为什么但它是空白的:g++ -c -o main.o main.cc main.cc:5:10: fatal error: chesspieces.h: No such file or directory
'Makefile' 文件的变量 'INCLUDES' 包含命令行开关,告诉编译器在哪个目录中查找包含文件。 '-Ipieces' 键告诉编译器在当前目录的名为 'pieces' 的子目录中查找包含文件。文件 'chesspieces.h' 应位于变量 'INCLUDES'.
中列举的子目录之一
你问题中没有说清楚的是你的目录结构,或者你运行make
时所在的目录。通过查看 github 存储库,我们可以看到您的 makefile 在根目录中,而您的源文件在子目录中:例如您有 src/main.cc
、src/Application/chess.cc
等
但是在您的 makefile 中,您没有提供任何路径。您的规则是:
main.o: main.cc board.h chess.h player.h chesspieces.h
$(CC) $(INCLUDES) -c main.cc
您在此处提到的这些文件不存在,因此 make 将失败。我实际上对你如何得到你现在的行为感到困惑:你应该得到这样的错误,No rule to build main.cc 或类似的东西。
也许您不在源代码树的根目录中 运行 make
,而是在其他地方?在这种情况下 make
无法找到您的 makefile,它只是使用默认规则,这解释了为什么找不到您的 INCLUDES
变量。
我正在从事与国际象棋相关的项目,我使用 makefile 来编译所有内容。我的目标是只编译已更改的文件,而不是每次都编译所有文件。文件夹结构可以看得更清楚here。 make main.o
导致错误:
fatal error: chesspieces.h: No such file or directory
5 | #include "chesspieces.h"
几乎所有其他东西都给我一个 No rule to make target .o . Stop
。我正在使用来自 chess/src 的 make,并且我的 Includes
变量中包含每个文件夹。在此处制作文件:
CC = g++
INCLUDES =-Icomponents -IBoard -Ipieces -IApplication
OUTPUT = -o Chess
Chess: main.o board.o player.o chess.o
$(CC) main.o board.o player.o chess.o $(OUTPUT)
main.o: main.cc board.h chess.h player.h chesspieces.h
$(CC) $(INCLUDES) -c main.cc
position.o: position.cc position.h
$(CC) $(INCLUDES) -c position.cc
piece.o: piece.cc piece.h color.h position.h
$(CC) $(INCLUDES) -c piece.cc
rook.o: rook.cc rook.h piece.h
$(CC) $(INCLUDES) -c rook.cc
queen.o: queen.cc queen.h piece.h
$(CC) $(INCLUDES) -c queen.cc
pawn.o: pawn.cc pawn.h piece.h
$(CC) $(INCLUDES) -c pawn.cc
knight.o: knight.cc knight.h piece.h
$(CC) $(INCLUDES) -c knight.cc
king.o: king.cc king.h piece.h
$(CC) $(INCLUDES) -c king.cc
bishop.o: bishop.cc bishop.h piece.h
$(CC) $(INCLUDES) -c bishop.cc
square.o: square.cc square.h color.h position.h
$(CC) $(INCLUDES) -c square.cc
board.o: board.cc board.h square.h position.h
$(CC) $(INCLUDES) -c board.cc
player.o: player.cpp player.h board.h piece.h
$(CC) $(INCLUDES) -c player.cc
chess.o: chess.cc chess.h player.h board.h piece.h
$(CC) $(INCLUDES) -c chess.cc
建立依赖关系我的想法是添加文件中包含的每个 header,对此不确定
编辑:在命令行上编译工作正常(除了链接错误)
g++ -Icomponents -IBoard -IPieces -Iapplication main.cc
所以 $(INCLUDES)
变量有问题,不知道为什么但它是空白的:g++ -c -o main.o main.cc main.cc:5:10: fatal error: chesspieces.h: No such file or directory
'Makefile' 文件的变量 'INCLUDES' 包含命令行开关,告诉编译器在哪个目录中查找包含文件。 '-Ipieces' 键告诉编译器在当前目录的名为 'pieces' 的子目录中查找包含文件。文件 'chesspieces.h' 应位于变量 'INCLUDES'.
中列举的子目录之一你问题中没有说清楚的是你的目录结构,或者你运行make
时所在的目录。通过查看 github 存储库,我们可以看到您的 makefile 在根目录中,而您的源文件在子目录中:例如您有 src/main.cc
、src/Application/chess.cc
等
但是在您的 makefile 中,您没有提供任何路径。您的规则是:
main.o: main.cc board.h chess.h player.h chesspieces.h
$(CC) $(INCLUDES) -c main.cc
您在此处提到的这些文件不存在,因此 make 将失败。我实际上对你如何得到你现在的行为感到困惑:你应该得到这样的错误,No rule to build main.cc 或类似的东西。
也许您不在源代码树的根目录中 运行 make
,而是在其他地方?在这种情况下 make
无法找到您的 makefile,它只是使用默认规则,这解释了为什么找不到您的 INCLUDES
变量。