如何创建Makefile以在C中编译单个任意文件名

Kha*_*sar 3 c gcc makefile gnu-make

我是C编程的新手,我想知道在Makefile中编写什么来编译单个.c文件.

说我有一个多.c一个文件夹中的文件),即sample1.c,sample2.c,sample3.c等等),我只是想编一个特定的文件名.我想只键入" make sample2",它将编译并调用一个输出sample2(几乎.c保持名称).

我已经阅读了几个解决方案,有人可能会提出这个建议,但没有成功.

SRC =  $(shell find . -type f -name \*.c)

executable: $(SRC:.c=.o)
    gcc -std=gnu99  $@ $^ 
Run Code Online (Sandbox Code Playgroud)

我需要做些什么来使它工作?

Jon*_*ler 7

将评论转换为答案.

你不需要makefile为此:make sample2将编译sample2.c以创建程序sample2.

您可以使用您想要/dev/null的名称makefile(或者如果您需要忽略现有名称makefile):

make -f /dev/null sample2
Run Code Online (Sandbox Code Playgroud)

当然,这会使用默认选项进行编译.如果你想使用更严格的标志,那么你可以这样做(假设现有的makefile是可消耗的):

echo 'CFLAGS = -Wall -Wextra -Werror -std=c11 -O3 -g' > makefile
make sample2
Run Code Online (Sandbox Code Playgroud)

或该主题的一些变体,例如:

make -f /dev/null CFLAGS="-Wall -Wextra -Werror -std=c11 -O3 -g" sample2
Run Code Online (Sandbox Code Playgroud)

简而言之,make知道如何将单个C文件编译成相应名称的可执行文件(减去.c后缀),而无需任何显式makefile.如果需要,您可以调整它如何编译该文件.