我是C的新手,我明白这两个命令都完成了同样的事情,但是其中一个命令做了哪些不同的事情呢?
答案 0 :(得分:2)
首先,如果您使用的是make
,那么对于hello.c
,您将调用make作为make hello
而不是make hello.c
。另请注意,make
与Makefile
一起使用的大部分时间都是make
。尽管如此,您可以使用hello
从单个源文件构建可执行二进制文件,如图所示。
如果可执行文件(make
)不存在,则两者都具有相同的效果 - 从源文件创建可执行文件。
但是,如果可执行文件已经存在,那么cc
只有在认为源代码在上次构建后发生了更改时才会运行构建命令,而$ make hello
cc hello.c -o hello
$ make hello
make: 'hello' is up to date. # make does not think source file has changed
$ touch hello.c # Update the timestamp of hello.c
$ make hello
cc hello.c -o hello # make thinks source file changed. Builds again
$
将始终执行构建。
例如:
cc
但是,$ cc hello.c -o hello
$ ls -l hello | cut -d ' ' -f '8-'
12:18 hello
$ cc hello.c -o hello # Build again without changing source
$ ls -l hello | cut -d ' ' -f '8-'
12:21 hello # hello was built again
$
不会检查来源是否已更改。它将始终执行所需的构建。
GNU make
以上说明适用于GNU cc
和make
。不确定其他实现。
P.S。:cc
不是编译器。它只在它认为应该编译时调用编译器,如上例所示。而cc hello.c
是编译器。
P.S。如果您运行a.out
,则首选项名称为hello
,而不是 SELECT *, SUM(CASE WHEN Typ = 1 THEN 1 ELSE 0 END) AS MailsSum, SUM(CASE WHEN Typ = 3 THEN 1 ELSE 0 END) AS CallsSum FROM customer INNER JOIN records on records.KD_ID = customer.KD_ID GROUP BY KD_ID HAVING MailsSum = 0
。
答案 1 :(得分:1)
make(1)
是一个运行命令的程序。您创建一个名为" Makefile"的文件。在目录中。 Makefile
具有特定语法的配方,超出了本答案的范围。然后,使用名为make
Makefile
命令
cc $filename
将在$filename
答案 2 :(得分:0)
cc
或gcc
或clang
将调用编译器。
make
。
在make
中,您将提供.o
文件的名称并包含头文件位置。