我从我的教授那里收到了这个样本makefile,我试图在Ubuntu上运行它但是我输入的命令不会运行它。 makefile中的所有文件都已存在,当我输入make时,它会生成文件,但实际的程序不会运行。我试图输入./a.out但是也没有运行它。请帮助我输入要运行程序的命令。
# Makefile for Library Management System
CXXFLAGS += --std=c++11
all: div main
rebuild: div clean main
debug: CXXFLAGS += -g
debug: rebuild
main: main.o controller.o view.o library.o publication.o
$(CXX) $(CXXFLAGS) -o lms main.o controller.o view.o library.o publication.o
main.o: main.cpp *.h
$(CXX) $(CXXFLAGS) -c main.cpp
controller.o: controller.cpp *.h
$(CXX) $(CXXFLAGS) -c controller.cpp
test_view: test_view.o controller.o view.o library.o publication.o
$(CXX) $(CXXFLAGS) -o test_view test_view.o controller.o view.o library.o publication.o
test_view.o: test_view.cpp view.h publication.h library.h
$(CXX) $(CXXFLAGS) -c test_view.cpp
test_library: test_library.o library.o publication.o
$(CXX) $(CXXFLAGS) -o test_library test_library.cpp library.o publication.o
test_library.o: test_library.cpp *.h
$(CXX) $(CXXFLAGS) -c test_library.cpp
library.o: library.cpp *.h
$(CXX) $(CXXFLAGS) -c library.cpp
test_publication: test_publication.o publication.o
$(CXX) $(CXXFLAGS) -o test_publication test_publication.o publication.o
test_publication.o: test_publication.cpp *.h
$(CXX) $(CXXFLAGS) -c test_publication.cpp
publication.o: publication.cpp *.h
$(CXX) $(CXXFLAGS) -c publication.cpp
clean:
-rm -f *.o lms test_age test_genre test_media test_publication test_library test_view test_view_actual.txt
div:
@echo
@echo 'X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-'
@echo '-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X'
@echo 'X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-'
@echo '-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X'
@echo
答案 0 :(得分:3)
有没有名为'lms'的文件?尝试运行:./ lms
'-o'之后的makefile中的内容指定输出文件名。这些是你可以运行的程序。
答案 1 :(得分:1)
make
的工作是构建程序,而不是运行它,所以makefile可能正常工作。
您可以从以下行看到:
all: div main
默认情况下,makefile会尝试构建div
和main
。
div
有一条规则只是将内容打印到控制台:
div:
@echo
@echo 'X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-'
@echo '-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X'
@echo 'X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-'
@echo '-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X'
@echo
如其他答案的评论中所述,main
的规则具有gcc -o lms
的标志,因此实际输出的可执行文件名称为lms
。
你应该告诉你的教授,这是一种糟糕的形式,因为makefile应该构建一个与其规则同名的文件。 (即make main
应该建立一个名为main
的文件。如果他不同意,请随意指出他。