找不到指向Makefile的库文件

She*_*enj 9 c makefile gnu-make

我正在尝试编译此工具.下面是Makefile的开头:

CC      = gcc
CFLAGS  = -Wall -O2 -D TRACES
DFLAGS  = -g -Wall -o0
CPPFLAGS= $(INCLUDES:%=-I %)
LDFLAGS = $(LIBRARIES:%=-L %)
LDLIBS  = $(USED_TOOLS:%=-l%)

MY_FILES = 
INCLUDE_DIR     = ~/include

TOOLBOX_INC     = $(INCLUDE_DIR)/tools
TOOLBOX_LIB     = $(TOOLBOX_INC)
USED_TOOLS      = std_io stringutils 
INCLUDES    = $(TOOLBOX_INC)
LIBRARIES   = $(TOOLBOX_LIB)
Run Code Online (Sandbox Code Playgroud)

我还有〜/ include/tools,编译后包括std_io.o,libstd_io.a,stringutils.o和libstringutils.a

我收到以下错误:

gcc -L ~/include/tools rank.o counterexample.o -lstd_io -lstringutils -o rank
ld: library not found for -lstd_io
collect2: ld returned 1 exit status
make: *** [rank] Error 1
Run Code Online (Sandbox Code Playgroud)

我不确定是否包含正确的内容,以及为什么找不到库文件.

编辑:结果我不小心在-L和-I选项之间留下了空格.此外,我想这些路径必须扩展.它现在正在工作,谢谢!

Jen*_*ens 15

问题是使用代字号来表示"主目录".只有当波形符号是单词中第一个不带引号的字符时,shell才会进行波形扩展.Makefiles永远不会做波浪扩展.因此,在

gcc -L~/include ...
Run Code Online (Sandbox Code Playgroud)

shell 执行波浪扩展,gcc将在当前目录中查找名为"〜/ include"的目录.但在

gcc -L ~/include ...
Run Code Online (Sandbox Code Playgroud)

执行波浪线扩展和gcc看到

gcc -L /usr/username/include ...
Run Code Online (Sandbox Code Playgroud)

相反,它按预期工作.正确的做法是永远不要对主目录使用代字号扩展,而只需在Makefile中正确使用$ HOME,例如

INCLUDE_DIR     = $$HOME/include
Run Code Online (Sandbox Code Playgroud)