Makefile make文件格式有什么问题
我用gedit为我的小项目编写了一个makefile。 当我运行“make”时,所有*.o和可执行文件都被创建。 一旦我更改了我的一个文件(没有makeclean或make-B) 显示它再次编译更改文件并再次链接所有对象。 但是,可执行文件的工作方式没有任何变化。 (在“make-B”之后,可执行文件运行正常) 如果对make文件的设计有其他问题或建议,我将很高兴听到 编辑 1) 该程序不会在屏幕上打印任何内容。 2) 更改位于king.cpp文件(位于另一个文件夹)中。将更改打印到屏幕Makefile make文件格式有什么问题,makefile,Makefile,我用gedit为我的小项目编写了一个makefile。 当我运行“make”时,所有*.o和可执行文件都被创建。 一旦我更改了我的一个文件(没有makeclean或make-B) 显示它再次编译更改文件并再次链接所有对象。 但是,可执行文件的工作方式没有任何变化。 (在“make-B”之后,可执行文件运行正常) 如果对make文件的设计有其他问题或建议,我将很高兴听到 编辑 1) 该程序不会在屏幕上打印任何内容。 2) 更改位于king.cpp文件(位于另一个文件夹)中。将更改打印到屏幕 [
[av@ArchlinuxAvichai chess]$ ls
chess ex1 Makefile
[av@ArchlinuxAvichai chess]$ ls chess
board.cpp board.hpp game.cpp movement.cpp tools
[av@ArchlinuxAvichai chess]$ ls chess/tools
bishop.cpp king.cpp knight.cpp pawn.cpp queen.cpp rook.cpp tool.hpp
[av@ArchlinuxAvichai chess]$ make
g++ -Wall -c chess/tools/pawn.cpp
g++ -Wall -c chess/tools/knight.cpp
g++ -Wall -c chess/tools/bishop.cpp
g++ -Wall -c chess/tools/rook.cpp
g++ -Wall -c chess/tools/queen.cpp
g++ -Wall -c chess/tools/king.cpp
g++ -Wall -c chess/board.cpp
g++ -Wall -c chess/movement.cpp
g++ -Wall -c chess/game.cpp
g++ -Wall pawn.o knight.o bishop.o rook.o queen.o king.o board.o movement.o game.o -o ex1
[av@ArchlinuxAvichai chess]$ ./ex1
[av@ArchlinuxAvichai chess]$ *** AT this stage i change the file
[av@ArchlinuxAvichai chess]$
[av@ArchlinuxAvichai chess]$ make
g++ -Wall -c chess/tools/king.cpp
g++ -Wall pawn.o knight.o bishop.o rook.o queen.o king.o board.o movement.o game.o -o ex1
[av@ArchlinuxAvichai chess]$ ./ex1
[av@ArchlinuxAvichai chess]$
[av@ArchlinuxAvichai chess]$ make -B
g++ -Wall -c chess/tools/pawn.cpp
g++ -Wall -c chess/tools/knight.cpp
g++ -Wall -c chess/tools/bishop.cpp
g++ -Wall -c chess/tools/rook.cpp
g++ -Wall -c chess/tools/queen.cpp
g++ -Wall -c chess/tools/king.cpp
g++ -Wall -c chess/board.cpp
g++ -Wall -c chess/movement.cpp
g++ -Wall -c chess/game.cpp
g++ -Wall pawn.o knight.o bishop.o rook.o queen.o king.o board.o movement.o game.o -o ex1
[av@ArchlinuxAvichai chess]$ ./ex1
Print Change
[av@ArchlinuxAvichai chess]$
请尝试以下生成文件:
CXX := g++
CXXFLAGS := -Wall
OBJS := pawn.o knight.o bishop.o rook.o queen.o king.o board.o movement.o game.o
COMPILE_CMD = ${CXX} -c -o $@ ${CXXFLAGS} -MD -MP $<
LINK_CMD = ${CXX} -o $@ ${LDFLAGS} $^
all: ex1
ex1: ${OBJS}
${LINK_CMD}
%.o : chess/tools/%.cpp
${COMPILE_CMD}
%.o : chess/%.cpp
${COMPILE_CMD}
-include $(OBJS:%.o=%.d)
clean:
rm -f *.o *.d
.PHONY: clean all
CXX:=g++
CXXFLAGS:=-Wall
对象:=当兵。哦骑士。哦主教。哦车。哦皇后。哦国王。哦棋盘。o移动。o游戏。o游戏
COMPILE_CMD=${CXX}-c-o$@${CXXFLAGS}-MD-MP$<
LINK_CMD=${CXX}-o$@${LDFLAGS}$^
全部:ex1
ex1:${OBJS}
${LINK_CMD}
%.o:chess/tools/%.cpp
${COMPILE_CMD}
%.o:chess/%.cpp
${COMPILE_CMD}
-包括$(对象:%.o=%.d)
清洁:
rm-f*.o*.d
.冒牌货
变化:
.o
输出文件clean
和all
标记为.PHONY
LDFLAGS
进行链接只是澄清一下,如果更改源文件并运行
make
则正在生成目标文件,但未重新链接可执行文件ex1
?您能否将make
的输出复制粘贴到您的问题中,以便我们查看其输出?你是如何运行你的应用程序的?在生成程序时或运行程序之前,您是否随时更改目录?如果没有-o
标记为$(CC)
,则会在源文件旁边创建目标文件。假设您更改了chess/tools/king.cpp
并说make
,那么您将得到一个新的chess/tools/king.o
。但是ex1
想要链接到king.o
而不是chess/tools/king.o
。这并不能解释为什么make-B
会有帮助,所以可能我遗漏了什么?你在编译之前是否保存了更改的文件?@MaximEgorushkin是的,否则make-B不应该打印新版本
CXX := g++
CXXFLAGS := -Wall
OBJS := pawn.o knight.o bishop.o rook.o queen.o king.o board.o movement.o game.o
COMPILE_CMD = ${CXX} -c -o $@ ${CXXFLAGS} -MD -MP $<
LINK_CMD = ${CXX} -o $@ ${LDFLAGS} $^
all: ex1
ex1: ${OBJS}
${LINK_CMD}
%.o : chess/tools/%.cpp
${COMPILE_CMD}
%.o : chess/%.cpp
${COMPILE_CMD}
-include $(OBJS:%.o=%.d)
clean:
rm -f *.o *.d
.PHONY: clean all