Linux 编译多个C文件,使生成的可执行文件以源文件的basename作为其名称

Linux 编译多个C文件,使生成的可执行文件以源文件的basename作为其名称,linux,gcc,Linux,Gcc,我在一个目录中有以下C文件 hello.c, myprog.c, out.c 我希望在单个命令中编译这些文件,以便可执行文件的命名如下: hello, myprog, out 我试过这个命令 ls *.c | awk '{print $1}' 这列出了所有没有扩展名的c文件 是否可以通过管道将这些值传递给变量并使用 | gcc $variable.c -o $variable 生成可执行文件 for i in *.c; do # or explicitly enumerate the

我在一个目录中有以下C文件

hello.c, myprog.c, out.c
我希望在单个命令中编译这些文件,以便可执行文件的命名如下:

hello, myprog, out
我试过这个命令

ls *.c | awk '{print $1}' 
这列出了所有没有扩展名的c文件

是否可以通过管道将这些值传递给变量并使用

| gcc $variable.c -o $variable
生成可执行文件

for i in *.c; do  # or explicitly enumerate the files
    gcc -o `basename $i .c` $i
done
(未测试)


(未测试)

如果已安装
make
,则内置的生成规则足以生成二进制文件


只要做
打招呼
,你就会得到你的二进制文件。无需显式调用
gcc

如果安装了
make
,则内置的生成规则足以生成二进制文件


只要做
打招呼
,你就会得到你的二进制文件。无需显式调用
gcc

Basename不会删除文件扩展名,它只获取路径的最后一个组件。@mity:实际上是这样,请尝试:
Basename foo.c.c
Oops。我忽略了第二个参数。这对我来说是新的。这是错误的。Basename不会删除文件扩展名,它只会获取路径的最后一个组件。@mity:实际上是这样,请尝试一下:
Basename foo.c.c
Oops。我忽略了第二个参数。这对我来说是新的。这是罪过。使用bash字符串操作更容易切掉名称-
${f%.c}
使用bash字符串操作更容易切掉名称-
${f%.c}
for f in *.c ; do gcc $f -o `echo $f | sed "s/\.c$//"`; done