2012-09-26 130 views
2

我有以下内容:.c代码,.h代码加.o文件和-lib库。当我用gcc编译c代码时,我这样做:如何创建一个makefile linux

gcc code.c -o code file.o -library 

如何创建makefile?

我现在有autoconf和automake吗?

我目前有:

Makefile 

all: 
    gcc code.c -o code file.o -library 

clean: 

rm -f code 

当我编译使我得到:

make: Nothing to be done for `all'. 

需要一些帮助。 Thx

+0

确实'file.o'有相应的'file.c'? – Flavius

+0

是的,它的确如此。它还有一个file.h –

+0

在生成文件中的“all”之前的单独行上声明“.PHONY:all”(请参阅​​http://www.gnu.org/software/make/manual/html_node/Phony-Targets。 HTML),“干净”相同。另外,你不指定“全部”取决于任何东西,而在应该依赖于“代码”,“代码”应该取决于“code.c”和“file.o”,“file.o”应该取决于文件.c等 – bobah

回答

4

对不起,我得给这个答案,但你有没有试过https://www.google.com/search?q=makefile+tutorial

挑一个,学习如何创建一个Makefile。你不需要自动工具。

我花了5分钟就想出了这一点,通过阅读Makefile Tutorial

CC=gcc 
CFLAGS=-Wall 
CLIBS=-lX11 
OUT=code 
OBJS=code.o file.o 


$(OUT): code.o file.o 
    $(CC) $(CFLAGS) $(CLIBS) -o $(OUT) $(OBJS) 
code.o: code.c 
    $(CC) $(CFLAGS) -c code.c -o code.o 
file.o: file.c 
    $(CC) $(CFLAGS) -c file.c -o file.o 

.PHONY: clean 

clean: 
    rm -rf *.o $(OUT) 

如果我要自动安装它的-library没有按牛逼存在在计算机上。

这是特定于使用的分布,你需要在机器上的根访问。这样做并不是如何完成的。相反,您应该在指定依赖关系的位置创建一个特定于您的发行版的包。

例如,对于Ubuntu的(因为它是最常用的分布),你需要创建一个.deb文件:http://wiki.debian.org/IntroDebianPackaging

然而,这无关你最初的问题。

+0

thx为您的答案。你能帮我吗?我想也包括依赖关系。如果在电脑上不存在-library,我想自动安装它。 –

+0

您需要编写规则来分别安装库。 但您需要管理员权限才能执行此操作。你能描述一下你想要做的更多吗?你是否想要制作一个应该分发的软件包? – Raj

+0

没有。我只是想用automake和autoconf创建一个makefile文件 –

1

查看本代码可能帮助您。

例如,创建一个C测试文件“test.c”,然后创建makefile,如下所示。

的Makefile

all: 

     cc -o test test.c 

clean: 

     rm -f test 

这个文件保存为 “生成文件”

  1. 运行这个makefile make命令。然后,它目前目录

  2. 创建测试可执行文件运行使用./test

  3. 您可以使用make clean删除可执行文件(测试)的文件。

对于任何参考看到Makefile tutorial

+0

这对原始问题或已接受的答案中已经存在的内容没有多大帮助。 – blackbird