Как удалить зависимость Makefile от файла C - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть приведенный ниже Makefile, и по какой-то причине он зависит от файла ewapi.c. Этот файл выполняет некоторые команды SWIG и использует файл ewapi.i. Я очистил все содержимое ewapi.c, и Makefile успешно запускается. Если я удалю файл ewapi.c, файл make не будет завершен. Стек исключений находится ниже, если это поможет. Любые идеи о том, как изменить Makefile, чтобы он не зависел от ewapi.c?

# BUILD_DIR and DIST_DIR are exported by build.xml
#
CMODE=

SWIG = swig
CC = $(PREFIX)gcc
LD = $(CC) 

OBJ_DIR = $(BUILD_DIR)/obj
AUTOGEN_DIR = $(BUILD_DIR)/auto-generated
PACKAGE_DIR = $(AUTOGEN_DIR)/com/sample/jni

PACKAGE = com.sample.jni

INCLUDES = -I$(JAVA_INCLUDE) \
           -I$(SAMPLE_SDK_DIR)/include \
           -I$(JDK_HOME)/include

LIB_INCLUDES = -L$(SAMPLE_SDK_DIR)/lib

LIBS = /lib/libssl.so.4 \
       /lib/libcrypto.so.4 \
       -lSampleApi \
       -lm

DIRS = $(PACKAGE_DIR) $(DIST_DIR) $(OBJ_DIR) $(AUTOGEN_DIR)

CFLAGS = $(CMODE) -Wall -fpic $(INCLUDES) -O0 -g3
SFLAGS = -java $(INCLUDES) -package $(PACKAGE) -outdir $(PACKAGE_DIR)
LDFLAGS = -shared $(LIB_INCLUDES) $(LIBS)

OBJECTS = $(OBJ_DIR)/ewapi_wrap.o $(OBJ_DIR)/ewapi.o
TARGET = $(DIST_DIR)/libSample.so

all: $(DIRS) $(TARGET)

%_wrap.c: %.i
    $(SWIG) $(SFLAGS) $< 

$(OBJ_DIR)/%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

$(TARGET): $(OBJECTS)
    $(LD) $(OBJECTS) $(LDFLAGS) -o $@

$(DIRS):
    mkdir -p $@

clean:
    rm -rf $(TARGET) $(PACKAGE_DIR)/* $(TARGET) $(AUTOGEN_DIR) $(OBJ_DIR)

Стек исключений (когда я удаляю ewapi.c):

[exec] rm ewapi_wrap.c
[exec] make-3.79.1-p7: *** No rule to make target `/test/build/obj/ewapi.o', needed by `/test/dist/libSample.so'.  Stop.

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Удалить $(OBJ_DIR)/ewapi.o из OBJECTS.

1 голос
/ 15 декабря 2011

Макросы OBJECTS включают $(OBJ_DIR)/ewapi.o;правило для $(TARGET) гласит, что оно зависит от $(OBJECTS);и правило для all гласит, что оно зависит от $(TARGET).Таким образом, должен быть способ создать ewapi.o из чего-то - и при отсутствии ewapi.c нет способа построить ewapi.o, поэтому вы получите жалобу.

Возможные исправления

  • Заменить ewapi.c.
  • Удалить ewapi.o из макроса $(OBJECTS).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...