我正在使用gcrypt,但我的编译器似乎无法找到它。这是我的makefile。 function.c是一个函数源文件,包含我定义的函数;我还用函数声明编写了一个头文件miao.h,其中包含了gcrypt.h。 main.c是包含miao.h的源文件。当我做的时候:。有人能帮帮我吗?这困扰了我很久。
CC = gcc
CFLAGS = 'libgcrypt-config --cflags'
LIBS = 'libgcrypt-config --libs'
OBJS = function.o main.o main
all: $(OBJS)
function.o: function.c
$(CC) -c function.c $(CFLAGS)
main.o: main.c
$(CC) -c main.c $(CFLAGS)
main: main.o function.o
$(CC) -o main main.o function.o $(LIBS)
clean:
rm $(OBJS)
答案 0 :(得分:0)
makefile应该写得更像以下内容:
警告:我无法测试makefile,因为我没有libgcrypt-config可用。根据网站:https://gnupg.org/documentation/manuals/gcrypt/Building-sources.html
libgcrypt-config
是可执行文件,所以应该用反向标记包围,而不是单引号,因此它将在当前shell中执行。
(stackoverflow上的后退标记将导致强调文本,但仍应显示它们应放置的位置。)
注意:我放置<tab>
你的实际makefile需要有一个制表符
注意:目标(如all
和clean
)不会生成具有相同名称的文件,因此在文件的早期需要声明:.PHONY: all clean
在定义宏时,使用:=
而不是=
,因此宏只会被评估一次。
任何对shell函数的调用都应该通过宏合并,因此很容易进行更改。一般来说,最好包含shell函数的路径:我在Linux上写了这个,你的路径可能不同。交叉编译时指定实际路径变得非常重要,或者通过$ PATH语句可以看到重复的名称(gcc
很容易发生)
注意:实际的libgcrypt-config
可执行文件必须通过$ PATH环境变量可见。
注意:所有单独的编译语句可以简化为以下两行:(并且编译时不需要其他任何内容)
%.o: %.c
<tab>$(CC) -c $< -o $@ -I. $(CFLAGS)
注意:请勿将规则的内容放在需要dependencies
的位置。 clean:
目标
建议的makefile如下:
CC := /usr/bin/gcc
RM := /usr/bin/rm
CFLAGS := `libgcrypt-config --cflags`
LIBS := `libgcrypt-config --libs`
OBJS := function.o main.o main
TARGET := main
.PHONY: all clean
all: $(TARGET)
function.o: function.c
<tab>$(CC) -c function.c $(CFLAGS) -o function.o -I.
main.o: main.c
<tab>$(CC) -c main.c $(CFLAGS) -o main.o -I.
$(TARGET): $(OBJS)
<tab>$(CC) -o $(TARGET) $(OBJS) $(LIBS)
clean:
<tab>$(RM) -f $(OBJS)