2017-08-26 96 views
3

我对C编程非常陌生,我想知道在Makefile中编写什么来编译单个.c文件。如何创建Makefile以编译C中的单个任意文件名

说我有一个多.c文件一个文件夹中),即sample1.csample2.csample3.c等),我只是想编一个特定的文件名。 我只想输入“make sample2”,它会编译并产生一个名为sample2的输出(几乎会保留.c的名称)。

我读过几种解决方案,有人可能会提出这个建议,但没有成功。

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

executable: $(SRC:.c=.o) 
    gcc -std=gnu99 [email protected] $^ 

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

+0

'find'命令说要从计算机上所有硬盘的根节点开始。这是因为它使用了“非相对”路径I.E. '\ *。c'将在根目录中查找每个* .c文件。建议将该行改为:'SRC = $(shell find。-type f -name。\ *。c)'然而,'make'工具(对于gnu)有这样的命令:'SRC:= $(通配符*。 c)'会在当前目录中找到所有'c'文件。 – user3629249

+0

如果是我,我会在编译时启用警告。 I.E.至少使用:' gcc -std = gnu99 -Wall -Wextra -pedantic -Wconversion $ @ $^-I.' ...然后是任何库路径,然后是代码所需的任何库。 – user3629249

+2

你不需要'makefile':'make sample2'会编译'sample2.c'来创建'sample2'程序。如果您想要:'make -f/dev/null sample2',您可以使用'/ dev/null'作为名称。等等,当然,它会与默认选项一起编译。如果你想使用更严格的标志,那么你可能会'echo'CFLAGS = -Wall -Wextra -Werror -std = c11 -O3 -g'> makefile'然后'make sample2'。 –

回答

7

将评论转换为答案。

你并不需要一个makefilemake sample2将编译sample2.c创建程序sample2

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

make -f /dev/null sample2 

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

echo 'CFLAGS = -Wall -Wextra -Werror -std=c11 -O3 -g' > makefile 
make sample2 

或就这一主题的一些变种,如:

make -f /dev/null CFLAGS="-Wall -Wextra -Werror -std=c11 -O3 -g" sample2 

总之,make知道如何将单个C文件编译为相应名称的可执行文件(减去.c后缀),而不需要任何明确的makefile。你可以调整它如何编译该文件,如果需要的话。

相关问题