2011-08-11 6 views
8

Estoy intentando compilar esta herramienta. A continuación se muestra el inicio de su Makefile:No encontré los archivos de biblioteca dirigidos en 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) 

También tengo ~/include/herramientas que, después de la compilación incluye std_io.o, libstd_io.a, stringutils.o y libstringutils.a

estoy consiguiendo el siguiente error:

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 

no estoy seguro de si las cosas no están incluidos correctamente, y por qué no es encontrar los archivos de la biblioteca.

Editar: resulta que accidentalmente dejé un espacio entre las opciones -L e -I. Además, los caminos tenían que ser expandidos, supongo. Está funcionando ahora, gracias!

+1

¿Estás seguro de que tu '~' se está expandiendo a tu directorio personal? Intenta usar la ruta completa para 'INCLUDE_DIR'. –

+0

¿Funciona desde la línea de comandos? – Beta

+0

¿Tiene los permisos correctos en 'libstd_io.a'? –

Respuesta

12

El problema es el uso de la tilde para significar "Directorio de inicio". Un intérprete de comandos hará expansión de tilde solo si la tilde es el primer carácter no incluido en una palabra. Makefiles nunca hace expansión de tilde. Así, en

gcc -L~/include ... 

la cáscara no se efectúa la expansión de tilde y gcc buscará un directorio llamado "~/include" en el directorio actual. Pero en

gcc -L ~/include ... 

la cáscara hace realizar la expansión de tilde y gcc ve

gcc -L /usr/username/include ... 

lugar, que funciona como se esperaba. Lo correcto es no utilizar nunca la expansión de tilde para el directorio de inicio, sino simplemente usar $ HOME de manera apropiada en el archivo Makefile, p.

INCLUDE_DIR  = $$HOME/include 
+1

Gracias por esta respuesta. De alguna forma, fue difícil para mí descubrir este poco sobre la expansión de tilde. – szydan

Cuestiones relacionadas