2016-05-25 2 views
1

Im делает некоторую простую программу прописки на omniorb 4.2, но makefile для сервера дает мне ошибку. Heres мой makeserver код файла:omniorb makefile server error

CC   = gcc 
CPPFLAGS  = -g -c 
LDFLAGS  = -g 
OMNI_HOME  = /opt/omniorb 
OMNI_INCLUDES = -I$(OMNI_HOME)/include 
OMNI_LIB_DIR = $(OMNI_HOME)/lib 
OMNIIDL  = $(OMNI_HOME)/bin/omniidl 
INCLUDES  = $(OMNI_INCLUDES) 
LIBS   = -lomniORB4 -lomnithread -lomniDynamic4 
OBJECTS  = Data.o CServiceA.o Server.o 

all Server: $(OBJECTS) 
    $(CC) $(LDFLAGS) -o Server -L$(OMNI_HOME)/lib $(OBJECTS)   $(LIBPATH) $(LIBS) 

Data.o: DataSK.cc Data.hh 
    $(CC) $(CPPFLAGS) $(INCLUDES) DataSK.cc 

Server.o: Server.cpp Data.hh 
    $(CC) $(CPPFLAGS) $(INCLUDES) Server.cpp 

CServiceA.o: CServiceA.cpp CServiceA.h Data.hh 
    $(CC) $(CPPFLAGS) $(INCLUDES) CServiceA.cpp 

DataSK.cc: Data.idl 
    $(OMNI_HOME)/bin/omniidl -bcxx Data.idl 

clean clean_all: 
    rm -fr *.o 
    rm -fr core 
    rm -fr *.hh 
    rm -fr *SK.cc 
    rm -fr Server 

И это ошибка это дает мне:

$ make -f MakeServer 
gcc -g -c -I/opt/omniorb/include DataSK.cc 
gcc -g -c -I/opt/omniorb/include CServiceA.cpp 
gcc -g -c -I/opt/omniorb/include Server.cpp 
gcc -g -o Server -L/opt/omniorb/lib Data.o CServiceA.o Server.o -  lomniORB4 -lomnithread -lomniDynamic4 
gcc: error: Data.o: file or directory doesn't exist 
MakeServer:13: fail in instructions for objective 'all' 
make: *** [all] Error 1 

ответ

0

Следующее правило нарушается

Data.o: DataSK.cc Data.hh 
    $(CC) $(CPPFLAGS) $(INCLUDES) DataSK.cc 

Вы сказали, что сделать из этого правила создает Data.o, но это фактически создает DataSK.o, поэтому измените правило и OBJECTS

OBJECTS  = DataSK.o CServiceA.o Server.o 

DataSK.o: DataSK.cc DataSK.hh 
    $(CC) $(CPPFLAGS) $(INCLUDES) DataSK.cc 

В качестве примечания, много вашего Makefile ненужен, встроенные в правилах и генерация НКИ зависимости может охватить большую часть работы:

omni_home := /opt/omniorb 

CPPFLAGS := -I$(omni_home)/include -MMD -MP 
CXXFLAGS := -g 
LDFLAGS := -L$(omni_home)/lib 
LDLIBS := -lomniORB4 -lomnithread -lomniDynamic4 

objs := DataSK.o CServiceA.o Server.o 
deps := $(objs:.o=.d) 

.PHONY: all clean 

all: Server 

Server: CC := g++ 
Server: $(objs) 

DataSK.o: DataSK.cc 
DataSK.cc DataSK.hh: Data.idl 
    $(omni_home)/bin/omniidl -bcxx $< 

clean: ; $(RM) $(objs) $(deps) DataSK.cc DataSK.hh Server 

-include $(deps) 

(выше не могут работайте правильно, так как я не тестировал его.)

+0

Ну, это была проблема в конце концов. Теперь у меня есть еще одна проблема с запуском сервера. Я запускаю omniNames, но попытка запустить сервер дает мне «corba :: system exception» Я забыл, ваш код был лучше моего, я тоже использовал для клиента. Без 2 точек работает отлично. У меня есть вопрос, с какой целью .d файлы? Это ошибка ./Server дает мне: '$ ./Server 'IOR: 010000001600000049444c3a446174612f53657276696365413a312 e30000000010000000000000064000000010102000c0000003139322e3 136382e312e3500b9e3000 ... Пойманный CORBA :: SystemException.' – Pepe

+0

Я не могу помочь вам с исключением с этой суммы информацию, попробуйте начать новый вопрос, поскольку он не связан с этим. Файлы '.d' являются фрагментами makefile, сгенерированными GCC, которые хранят зависимости, поэтому вам не нужно писать такие вещи, как' CServiceA.o: DataSK.hh', попробуйте их прочитать, если вам интересно. – user657267

+0

Ох ... хорошо. Я попробую, THX для того, чтобы помочь мне. Ну, проблема решена. – Pepe