试图找出makefile

试图找出makefile,makefile,command-prompt,Makefile,Command Prompt,因此,我是makefiles的新手,在命令提示符下我很糟糕。所以我想确保我的语法是正确的 我有三个文件: main.cpp Blob.cpp Blob.h 我将创建一个名为makefile.make的文件(在记事本或其他东西中),其中的文本将为: all: g++ main.cpp Blob.cpp Blob.h -o hello 然后在命令提示符下运行 make 文件将被创建吗?这是正确的吗?它们都在同一个目录中,以及VS2012放在其中的一些其他文件夹。谷歌“makefile教程”,你

因此,我是makefiles的新手,在命令提示符下我很糟糕。所以我想确保我的语法是正确的

我有三个文件:

main.cpp
Blob.cpp
Blob.h
我将创建一个名为makefile.make的文件(在记事本或其他东西中),其中的文本将为:

all:
g++ main.cpp Blob.cpp Blob.h -o hello
然后在命令提示符下运行

make
文件将被创建吗?这是正确的吗?它们都在同一个目录中,以及VS2012放在其中的一些其他文件夹。

谷歌“makefile教程”,你会发现很多网站

要运行的命令前面必须有制表符,因此应为:

all:
        g++ main.cpp Blob.cpp -o hello
确保您没有使用将制表符转换为空格的编辑器。

试试这个

hello:main.cpp Blob.cpp
[TAB] g++ main.cpp Blob.cpp -o hello
将其命名为
Makefile
Makefile
。您可以只运行
make
来构建它。否则,可以随意命名它,例如
mymakefile
运行make-f mymakefile
来构建它


使用

刷新如果您只想在每个文件都发生更改时重新生成可执行文件,请使用

all: hello

hello: main.cpp Blob.cpp Blob.h
    g++ -o hello main.cpp Blob.cpp
如果您想要单独编译,您可以这样做

all: hello

hello: main.o Blob.o
    g++ -o hello main.o Blob.o

main.o: main.cpp Blob.h
    g++ -o main.o main.cpp

Blob.o: Blob.cpp Blob.h
    g++ -o Blob.o Blob.cpp

在这两种情况下,除了指定要完成的工作外,我们还会告诉make哪些文件是依赖项(即,如果这些文件发生更改,我们需要重建这些文件)。

(1)您可能不希望在命令行中指定
.h
文件,而是希望将其指定为依赖项。(2) 你没有利用
make
的优势;关键是,
make
可以注意到依赖项何时比其依赖项更新,从而知道需要做什么工作。@dmckee我有点迷糊了。要使语法正确,我需要做哪些更改?同样,即使不需要,这也会始终重建目标,除非命令行错误:头文件不应命名。@dmckee我已经删除了.h文件。我同意这将无条件地重新编译,这没有什么害处。当他了解更多关于makefile的知识时,他可以利用条件编译。因为目标名称是hello。哪个是输出文件name@SagarSakre它是多余的,但它也是一种常见的习惯用法,因为(当您了解更多时)它允许您使用一个变量来指定默认目标的依赖关系。是的,通常使用makefile规则。对于当前的问题,我们可以从技术上忽略,
all
不存在,因为它允许您使用变量。即使没有
all
,也可以使用变量
all
(或类似)存在,因为通常您希望在一个makefile中有多个最终结果(您希望构建
hello
,但也要构建
bye
或其他任何内容)。然后
all
将所有最终结果列为先决条件,以确保它们都是最新的。