我正在使用 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)
最佳答案
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)
关于c - libgcrypt-config --libs : no such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35076278/