Ошибка сборки Makefile.win FLTK - PullRequest
       7

Ошибка сборки Makefile.win FLTK

0 голосов
/ 05 августа 2009

У меня есть проект с графическим интерфейсом (с использованием Fast Light Toolkit) со следующими компонентами внутри него.

Все заголовки и файлы, перечисленные здесь (обратите внимание на Makefile.win)

http://www.stroustrup.com/Programming/Graphics/

и это файл, который я пытаюсь запустить.

#include "Simple_window.h"  // get access to our window library
#include "Graph.h"          // get access to our graphics library facilties

int main()
{
    using namespace Graph_lib; // our graphics facilities are in Graph_lib

    Point tl(100,100);         // to become top left corner of window

    Simple_window win(tl,600,400,"Canvas"); // make a simple window

    Polygon poly; // make a shape (a polygon)

    poly.add(Point(300,200));     // add point
    poly.add(Point(350,100));     // add another point
    poly.add(Point(400,200));     // add a third point

    poly.set_color(Color::red);   // adjust properties of poly

    win.attach(poly);             // connect poly to window

    win.wait_for_button();        // give control to display engine
}

Сначала, когда я пытался скомпилировать, я получил сообщение об ошибке

File: C:\Dev-Cpp\Makefile.win
Error: [Build Error] [Projectname.exe] Error 1

Затем я вошел в параметры проекта и выбрал «Использовать пользовательский make-файл», выбрав пользовательский make-файл с веб-сайта, который сохраняется в моей папке C ++ (и является частью проекта.)

Когда я сделал это, я получил

File: C:\Users\Alex\Makefile.win (this is a different makefile.win)
Error: [Build Error] No rule to make target 'c12_3.cpp'(the file I'm compiling)
       needed by 'c12_3.o'. Stop.

Я использую Dev-C ++ в качестве компилятора. Если вам нужна дополнительная информация, просто дайте мне знать. Я довольно застрял.

Makefile.win с сайта после компиляции выглядит следующим образом.

# Project: Stroustrup
# Makefile created by Dev-C++ 4.9.9.2

CPP  = g++.exe
CC   = gcc.exe
WINDRES = windres.exe
RES  = Stroustrup_private.res
OBJ  = Makefile.o ../Users/Alex/C++/ch12_3.o ../Users/Alex/C++/Graph.o ../Users/Alex/C++/GUI.o ../Users/Alex/C++/Simple_Window.o ../Users/Alex/C++/Window.o $(RES)
LINKOBJ  = Makefile.o ../Users/Alex/C++/ch12_3.o ../Users/Alex/C++/Graph.o ../Users/Alex/C++/GUI.o ../Users/Alex/C++/Simple_Window.o ../Users/Alex/C++/Window.o $(RES)
LIBS =  -L"C:/Dev-Cpp/lib" -mwindows -lfltk -lole32 -luuid -lcomctl32 -lwsock32 -lm  
INCS =  -I"C:/Dev-Cpp/include" 
CXXINCS =  -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  -I"C:/Dev-Cpp/include/c++/3.4.2/backward"  -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32"  -I"C:/Dev-Cpp/include/c++/3.4.2"  -I"C:/Dev-Cpp/include" 
BIN  = Stroustrup.exe
CXXFLAGS = $(CXXINCS)  
CFLAGS = $(INCS) -DWIN32 -mms-bitfields  
RM = rm -f

.PHONY: all all-before all-after clean clean-custom

all: all-before Stroustrup.exe all-after


clean: clean-custom
    ${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
    $(CPP) $(LINKOBJ) -o "Stroustrup.exe" $(LIBS)

Makefile.o: Makefile.win
    $(CPP) -c Makefile.win -o Makefile.o $(CXXFLAGS)

../Users/Alex/C++/ch12_3.o: ../Users/Alex/C++/ch12_3.cpp
    $(CPP) -c ../Users/Alex/C++/ch12_3.cpp -o ../Users/Alex/C++/ch12_3.o $(CXXFLAGS)

../Users/Alex/C++/Graph.o: ../Users/Alex/C++/Graph.cpp
    $(CPP) -c ../Users/Alex/C++/Graph.cpp -o ../Users/Alex/C++/Graph.o $(CXXFLAGS)

../Users/Alex/C++/GUI.o: ../Users/Alex/C++/GUI.cpp
    $(CPP) -c ../Users/Alex/C++/GUI.cpp -o ../Users/Alex/C++/GUI.o $(CXXFLAGS)

../Users/Alex/C++/Simple_Window.o: ../Users/Alex/C++/Simple_Window.cpp
    $(CPP) -c ../Users/Alex/C++/Simple_Window.cpp -o ../Users/Alex/C++/Simple_Window.o $(CXXFLAGS)

../Users/Alex/C++/Window.o: ../Users/Alex/C++/Window.cpp
    $(CPP) -c ../Users/Alex/C++/Window.cpp -o ../Users/Alex/C++/Window.o $(CXXFLAGS)

Stroustrup_private.res: Stroustrup_private.rc 
    $(WINDRES) -i Stroustrup_private.rc --input-format=rc -o Stroustrup_private.res -O coff 

1 Ответ

1 голос
/ 05 августа 2009

Вы не должны явно определять CPP и CC. Они уже определены для вас Make. Кроме того, вы должны использовать CXX вместо CPP (по умолчанию CXX относится к компилятору c ++, а CPP относится к препроцессору C). Кроме того, вам не нужно ставить так много целей. Уже есть правила автоматической сборки, которые будут генерировать файл .o из файла .cpp с тем же базовым именем. Кроме того, ваше правило "Makefile.o: Makefile.win" не имеет никакого смысла (я сомневаюсь, что вы компилируете make-файл). Я настоятельно рекомендую вам изучить CMake, так как он значительно облегчит вашу жизнь. За исключением этого, вы можете прочитать больше о Make.

EDIT:

Я заметил, что у ваших путей есть косая черта ("/") вместо обратной косой черты ("\"), что может быть проблемой в Windows. Хотя обычно это не проблема Cygwin, она может быть проблемой, если вы смешиваете оба типа слеша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...