c++ - omn​​iorb makefile 服务器错误

标签 c++ ubuntu makefile

我在 omniorb 4.2 上做了一些简单的附加程序,但是服务器的 makefile 给我一个错误。 这是我的 makeserver 文件代码:

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

最佳答案

下面的规则被打破了

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

你已经告诉 make 这个规则创建了 Data.o,但它实际上创建了 DataSK.o,所以改变规则和 OBJECTS

OBJECTS       = DataSK.o CServiceA.o Server.o

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

如旁注,您的许多 makefile 都是不必要的,内置规则和 gcc 依赖项生成可以涵盖大部分工作:

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)

(以上可能无法正常工作,因为我还没有测试过。)

关于c++ - omn​​iorb makefile 服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37426265/

相关文章:

c++ - 尝试在 C++ 中使用 glDrawArrays 时出错

ruby-on-rails - 为什么在 ubuntu 12.04 上完全跳过了 Ruby Daemons.run_proc block

在指定时间(以毫秒为单位)后停止的 C 函数

c - 函数的隐式声明和 undefined reference

android - 仅在eclipse中打开hello-jni.c文件时在eclipse中编译Hello-Jni失败

c++ - gfortran undefined reference

c++ - 如何使用默认模板参数分离模板类的声明和实现?

linux - 从终端更改 Ubuntu 12.04 中的系统代理设置

c - 多个 .c 和 .h 文件的 Makefile

c++ - 从同一目录读取图像?