我需要为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
请帮助
答案 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 $^
其中$@
是当前规则的目标,$^
是先决条件。
答案 3 :(得分:0)
您的程序的简单make文件是
build :
gcc /your_full_path_to_c_file/cJ.c my.c -lcrypto -o my -lm
只需将其复制到一个文件中,将该文件的名称保留为makefile
然后以make build