2010-09-01 91 views
3

当我使用cc命令编译.c文件时,它会创建一个a.out可执行文件。我注意到它在我的当前目录中创建a.out文件。有没有办法使a.out文件与我碰巧在系统中的.c文件在同一个目录下创建?UNIX cc可执行文件位置

例如如果我当前的路径是~/desktop,我在键入命令:

cc path/to/my/file/example.c 

它创建a.out文件中~/desktop目录。我想创建a.out文件path/to/my/file/a.out

+1

除了那些已经被张贴的答案(而哪些有帮助),我建议学习如何编写一个'Makefile'(如果你的项目可能会变得更大,可能会使用autoconf/automake)。 – Bruno 2010-09-01 12:44:18

回答

5

你将不得不使用-o每次调用CC时间切换:

cc -o path/to/my/file/a.out path/to/my/file/example.c 

,或者你可以做一个包装脚本是这样的:

mycc

#!/bin/bash 

dirname=`dirname "$1"` 
#enquoted both input and output filenames to make it work with files that include spaces in their names. 
cmd="cc -o \"$dirname/a.out\" \"$1\"" 

eval $cmd 

那么你可以调用

./mycc path/to/my/file/example.c 

,它会反过来,调用

cc -o "path/to/my/file/a.out" path/to/my/file/example.c 

当然,你可以把mycc在$ PATH的,所以你可以这样调用它:

mycc path/to/my/file/example.c 
+0

这可能是一个别名吗? – fuz 2010-09-01 12:10:36

+0

您也可以命名输出文件,如.c文件,即'test.c' - >'test.out',如下所示:'cc $ 1 -o $(dirname $ 1)/ $(basename $ 1 .c)。out“' – adf88 2010-09-01 12:21:57

+0

@FUZxxl你不能简单的别名cc来做到这一点,cuz不幸的是,你不能传递参数给别名(因为我刚刚发现:)) – aularon 2010-09-01 12:35:16

1

是的,用-o

cc path/to/my/file/example.c -o path/to/my/file/a.out 
2

您可以给“-o”标志来定义输出文件。例如:

cc path/to/my/file/example.c -o path/to/my/file/a.out 
1

它可能不是你要找什么,但你可以很容易地使用-o siwtch这样重定向编译输出:

cc -o /a/dir/output b/dir/input.c 

我不知道如何archieve,你想要什么(自动更换),但我想你可以用一些像这样的庆典做:(我在脚本较差,未经测试,可能是错误的):

i = "a/path/to/a/file.c" cc -o ${i%.c} $i 

这应该C将i中指定的文件复制到同一目录中的输出文件中,但删除了.c后缀。

+0

您需要提供文件路径而不是目录。你的'-o'选项有一个缺失的文件名。 – codaddict 2010-09-01 12:06:38

+0

尽管我很伤心,但我在shell脚本中很糟糕。不应该像'$ i ='a/b/file.c' - >'cc -o a/b/file a/b/file.c'这样做吗? – fuz 2010-09-01 12:09:26