如何为c编写一个简单的makefile

时间:2011-09-23 06:42:12

标签: c makefile

我需要为my.c写一个简单的make文件,所以在

之后
make

然后我的程序可以由

运行
./my

my.c可以通过以下方式编译:

gcc cJ/cJ.c my.c -lcrypto -o my -lm

由于  我把它放在我的makefile中

all:my
my: cJ.o my.o
 gcc cJ.o -lcrypt my.o -o my
cJ.o: cJ/cJ.c
     gcc -c cJ/cJ.c
my.o: my.c
     gcc -c my.c -lm

请帮助

4 个答案:

答案 0 :(得分:8)

这是一个简单的教程:http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/

make的一个非常重要的事情就是让标签正确!

答案 1 :(得分:7)

嗯,makefile只是一种特殊的脚本。每一个都是独一无二的,对于这样简单的任务,这就足够了:

生成文件:

CC=gcc
CFLAGS=-lm -lcrypto
SOURCES=my.c cJ/cJ.c

all: my

my: $(SOURCES)
        $(CC) -o my $(SOURCES) $(CFLAGS)

稍后您可能希望使用其他选项(例如通配符%。c )来编译多个文件而无需将其写入。

可替换地:

CC=gcc
CFLAGS=-lm -lcrypto

MY_SOURCES = my.c cJ/cJ.c
MY_OBJS = $(patsubst %.c,%.o, $(MY_SOURCES))

all: my

%o: %.c
    $(CC) $(CFLAGS) -c $<

my: $(MY_OBJS)
    $(CC) $(CFLAGS) $^ -o $@

请注意,每个目标后面的行(“my:”,...)必须以tab(\ t)开头,而不是空格。

答案 2 :(得分:3)

只是一个小小的修正:将-lm放到链接步骤,然后放在所有目标文件之后。

all: my
my: cJ.o my.o
    gcc cJ.o my.o -o my -lcrypt -lm
cJ.o: cJ/cJ.c
    gcc -c cJ/cJ.c
my.o: my.c
    gcc -c my.c

然后,您可以使用automatic variables更多地工作:

all: my
my: cJ.o my.o
    gcc $^ -o $@ -lcrypt -lm
cJ.o: cJ/cJ.c
    gcc -c $^
my.o: my.c
    gcc -c $^

其中$@是当前规则的目标,$^是先决条件。

另见http://www.gnu.org/software/make/manual/make.html

答案 3 :(得分:0)

您的程序的简单make文件是

build : 
        gcc /your_full_path_to_c_file/cJ.c my.c -lcrypto -o my -lm

只需将其复制到一个文件中,将该文件的名称保留为makefile 然后以make build

运行