C++ 从生成文件运行程序

C++ 从生成文件运行程序,c++,ubuntu,makefile,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:

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

是否有名为“lms”的文件?尝试运行:./lms


“-o”后面的makefile中的内容指定输出文件名。这些是您可以运行的程序。

是否有名为“lms”的文件?尝试运行:./lms


“-o”后面的makefile中的内容指定输出文件名。这些是您可以运行的程序。

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应该构建一个与它的规则同名的文件。(即
makemain
应建立一个名为
main
的文件)如果他不同意,请随意指出他

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应该构建一个与它的规则同名的文件。(即
makemain
应建立一个名为
main
的文件)如果他不同意,请随意指出他

只是一个猜测:规则名称后面的命令应该由一个制表符缩进,但在您的代码片段中我看到4个空格。制表符在
Makefile
-s中很重要-只是一个猜测:规则名称后面的命令应该由制表符缩进,但是在您的代码片段中,我看到了4个空格。制表符在
Makefile
中很重要-slms是由“main”目标指定的输出文件。(-o lms)呃。这是一个糟糕的makefile,我没有注意到,因此我之前的评论是这样的。程序名应该与非缩进行中冒号前面的内容相同,但在本例中不是这样。您可以使用特殊变量“$@”将其更改为目标名称。@Breezyb12 Sweet!如果有机会,请接受我的回答。@vincent是的,或者最好不要包含任何超出行
main.o controller.o view.o library.o publication.o
(或者使用名称
lms
)的内容,因为.lms是“main”目标指定的输出文件。(-o lms)呃。这是一个糟糕的makefile,我没有注意到,因此我之前的评论是这样的。程序名应该与非缩进行中冒号前面的内容相同,但在本例中不是这样。您可以使用特殊变量“$@”将其更改为目标名称。@Breezyb12 Sweet!如果有机会,请接受我的回答。@vincent是的,或者最好不要包含任何超出行
main:main.o controller.o view.o library.o publication.o
(或者使用名称
lms
)的内容,因为。