make -c VS make -f
make
是一个用于构建(编译)项目的工具,它通过读取一个名为 Makefile
的文件来执行构建任务。make
命令有很多选项和参数,其中包括 -c
和 -f
。
-
make -c
:-
作用:指定进入指定的目录并执行相应的
Makefile
。 -
示例:假设你有一个名为
project
的目录,该目录包含
Makefile
文件,你可以使用以下命令进入该目录并执行构建任务:
make -C project
-
这将进入
project
目录,并执行该目录下的Makefile
文件中定义的构建规则。
-
-
make -f
:-
作用:指定要使用的
Makefile
文件的名称。 -
示例:假设你有一个名为
custom_makefile
的文件,你可以使用以下命令执行构建任务:
make -f custom_makefile
-
这将使用
custom_makefile
文件作为构建规则的来源,而不是默认的Makefile
。
-
-
异同点:
- 共同点: 两者都用于定制
make
命令的行为,使其能够执行指定的构建规则。 - 不同点:
-c
用于指定目录,而-f
用于指定文件。-c
通常与目录结合使用,而-f
通常与文件名结合使用。
- 共同点: 两者都用于定制
示例:
假设有以下目录结构:
project/
|-- Makefile
|-- src/
| |-- main.c
| |-- utils.c
| |-- utils.h
project/Makefile
可能如下所示:
# project/Makefile
CC = gcc
CFLAGS = -Wall
all: my_program
my_program: src/main.c src/utils.c
$(CC) $(CFLAGS) $^ -o $@
clean:
rm -f my_program
现在,如果你想在 project
目录外执行构建任务,可以使用 -C
选项:
make -C project
或者,如果你有一个自定义的 Makefile
文件,比如 custom_makefile
:
make -f custom_makefile
这两者的选择取决于你想要执行的具体构建规则和文件组织结构。