сделать с .cpp и .c? - PullRequest
       1

сделать с .cpp и .c?

0 голосов
/ 01 декабря 2011

Мой Makefile постоянно говорит мне

make: *** No rule to make target `rs232.c',

Я перечисляю здесь файлы (rs232.c находится в самом конце) -

SOURCES_RAW=codeprofiler.cpp gametimer.cpp timer.cpp timeprofile.cpp vector4.cpp matrix.cpp agent.cpp agentcontroller.cpp dummy.cpp evader.cpp pursuer.cpp goal.cpp player.cpp graphdata.cpp graph.cpp cubiccoefs.cpp segment.cpp trajectory.cpp anode.cpp arrayvector4.cpp color.cpp drawcomponent.cpp drawcontroller.cpp flags.cpp global.cpp map_analyzer.cpp minheap.cpp node.cpp quadtree.cpp queue.cpp results.cpp sensor.cpp settings.cpp utility.cpp world.cpp gui.cpp main.cpp logger.cpp parameters.cpp counter.cpp polygon.cpp line.cpp robot_driver_agent.cpp position.cpp robot_driver_priorityqueue.cpp main.cpp robot_driver_tree.cpp robot_driver_grid.cpp path.cpp tcpserver.cpp tcpclient.cpp servercontrol.cpp clientcontrol.cpp Robot.cpp udpserver.cpp udpclient.cpp rs232.c 

Все эти файлы находятся в папкеназывается SRC.Поэтому я делаю -

SRCDIR= src
SOURCES:=$(SOURCES_RAW)
SOURCES:=$(patsubst %.c, $(SRCDIR)/%.c, $(SOURCES))
SOURCES:=$(patsubst %.cpp, $(SRCDIR)/%.cpp, $(SOURCES))

Почему он не скомпилирует файл .c?

Весь Makefile -

INCLUDE = -I/usr/X11R6/include
#INCLUDE_W32 = -Isrc 
CC=g++ 
CFLAGS=-w -D LINUX -fpermissive 
CFLAGS_R= -w -D LINUX -O3 -fpermissive 
CFLAGS_D=-w -D LINUX -fpermissive 
OBJ= obj
OBJ_DEBUG= obj_debug
OBJDIR= release
SRCDIR= src

LDFLAGS= -L/usr/X11R6/lib$(LIBSELECT) -lGL -lfltk -lfltk_gl -lXext -lX11 -lglut -lGLU -lfltk_images

SOURCES_RAW=codeprofiler.cpp gametimer.cpp timer.cpp timeprofile.cpp vector4.cpp matrix.cpp agent.cpp agentcontroller.cpp dummy.cpp evader.cpp pursuer.cpp goal.cpp player.cpp graphdata.cpp graph.cpp cubiccoefs.cpp segment.cpp trajectory.cpp anode.cpp arrayvector4.cpp color.cpp drawcomponent.cpp drawcontroller.cpp flags.cpp global.cpp map_analyzer.cpp minheap.cpp node.cpp quadtree.cpp queue.cpp results.cpp sensor.cpp settings.cpp utility.cpp world.cpp gui.cpp main.cpp logger.cpp parameters.cpp counter.cpp polygon.cpp line.cpp robot_driver_agent.cpp position.cpp robot_driver_priorityqueue.cpp main.cpp robot_driver_tree.cpp robot_driver_grid.cpp path.cpp tcpserver.cpp tcpclient.cpp servercontrol.cpp clientcontrol.cpp Robot.cpp udpserver.cpp udpclient.cpp rs232.c

TARGET:= pursuit_evasion
TARGETD:= pursuit_evasion_d
TARGETP:= pursuit_evasion_p
TARGETW32:= pursuit_evasion_w32

OBJECTS:=$(SOURCES_RAW:.cpp=.o)
OBJECTS:=$(patsubst %.o,$(OBJDIR)/%.o, $(OBJECTS))

SOURCES:=$(SOURCES_RAW)
SOURCES:=$(patsubst %.cpp, $(SRCDIR)/%.cpp, $(SOURCES))

OBJ_DEBUG:=$(SOURCES_RAW:.cpp=.o)
OBJ_DEBUG:=$(patsubst %.o,debug/%.o, $(OBJ_DEBUG))

OBJECTS_P:=$(SOURCES_RAW:.cpp=.o)
OBJECTS_P:=$(patsubst %.o,profile/%.o, $(OBJECTS_P))

OBJDIR=obj

all: $(TARGET)

#--- Release 
$(TARGET): $(OBJECTS)
    $(CC) -w -D LINUX $(INCLUDE) $^ -o $@ $(LDFLAGS)

release/%.o: src/%.cpp
    $(CC) -c $< $(CFLAGS_R) -o $@ 

#--- Debug
debug: $(TARGETD)

$(TARGETD): $(OBJ_DEBUG)
    $(CC) -w -D LINUX $(INCLUDE) $^ -o $@ $(LDFLAGS)

debug/%.o: src/%.cpp
    $(CC) -c -g $< $(CFLAGS)-o $@ 

#-- Profile
profile: $(TARGETP)

$(TARGETP): $(OBJECTS_P)
    $(CC) -w -g -pg -D LINUX $(INCLUDE) $^ -o $@ $(LDFLAGS)

profile/%.o: src/%.cpp
    $(CC) -c -g -pg $< $(CFLAGS)-o $@ 

win32: $(TARGETW32)

$(TARGETW32): $(OBJECTS)
    $(CC) -w -D WIN32 $(INCLUDE_W32) $^ -o $@ $(LDFLAGS)

.PHONY : clean
clean:
    rm -f release/*.o
    rm -f debug/*.o
    rm -f profile/*.o
    rm -f $(TARGET) $(TARGETD) $(TARGETP)

1 Ответ

2 голосов
/ 01 декабря 2011

Все ваши предыдущие файлы (до rs232.c) на самом деле являются файлами C ++.

Полагаю, у вас есть правило для компиляции файлов C ++, позже в вашем make-файле, но есть ли у вас также правило для компиляции файлов чистого C?

Как:

%.o: %.c
    gcc [...]

РЕДАКТИРОВАТЬ - Только для вас, чтобы знать

Вы не обязаны указывать все файлы, которые хотите скомпилировать.

Посмотрите на функции foreach и dir.
При этом вы можете получить все файлы, соответствующие определенному шаблону, из каталога.

Пример: * * один тысяча двадцать-одна

FILES = $(foreach dir,$(DIR_SRC),$(wildcard $(DIR_SRC)*.cpp))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...