从makefile运行程序

时间:2017-10-02 17:14:06

标签: c++ ubuntu makefile

我从我的教授那里收到了这个样本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

2 个答案:

答案 0 :(得分:3)

有没有名为'lms'的文件?尝试运行:./ lms

'-o'之后的makefile中的内容指定输出文件名。这些是你可以运行的程序。

答案 1 :(得分:1)

make的工作是构建程序,而不是运行它,所以makefile可能正常工作。

您可以从以下行看到:

all: div main

默认情况下,makefile会尝试构建divmain

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的文件。如果他不同意,请随意指出他。